{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Giving Claude a Crop Tool for Better Image Analysis\n",
    "\n",
    "When Claude analyzes images, it sees the entire image at once. For detailed tasks—like reading small text, comparing similar values in a chart, or examining fine details—this can be limiting.\n",
    "\n",
    "**The solution:** Give Claude a tool that lets it \"zoom in\" by cropping regions of interest.\n",
    "\n",
    "This notebook shows how to build a simple crop tool and demonstrates when it's useful."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## When is a Crop Tool Useful?\n",
    "\n",
    "- **Charts and graphs**: Comparing bars/lines that are close in value, reading axis labels\n",
    "- **Documents**: Reading small text, examining signatures or stamps\n",
    "- **Technical diagrams**: Following wires/connections, reading component labels\n",
    "- **Dense images**: Any image where details are small relative to the whole"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Setup"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Note: you may need to restart the kernel to use updated packages.\n"
     ]
    }
   ],
   "source": [
    "%pip install -q anthropic pillow datasets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "import base64\n",
    "from io import BytesIO\n",
    "\n",
    "from anthropic import Anthropic\n",
    "from datasets import load_dataset\n",
    "from IPython.display import Image, display\n",
    "from PIL import Image as PILImage\n",
    "\n",
    "client = Anthropic()\n",
    "MODEL = \"claude-opus-4-5-20251101\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Load an Example Chart\n",
    "\n",
    "We'll use a chart from the FigureQA dataset to demonstrate."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Question: Is Cyan the minimum?\n",
      "Answer: Yes.\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<PIL.PngImagePlugin.PngImageFile image mode=RGBA size=418x400>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Load a small subset of FigureQA\n",
    "dataset = load_dataset(\"vikhyatk/figureqa\", split=\"train[:10]\")\n",
    "\n",
    "\n",
    "# Helper to convert dataset images to PIL\n",
    "def get_pil_image(img) -> PILImage.Image:\n",
    "    if isinstance(img, PILImage.Image):\n",
    "        return img\n",
    "    if isinstance(img, dict) and \"bytes\" in img:\n",
    "        return PILImage.open(BytesIO(img[\"bytes\"]))\n",
    "    raise ValueError(f\"Cannot convert {type(img)}\")\n",
    "\n",
    "\n",
    "# Get an example chart\n",
    "example = dataset[3]\n",
    "chart_image = get_pil_image(example[\"image\"])\n",
    "question = example[\"qa\"][0][\"question\"]\n",
    "answer = example[\"qa\"][0][\"answer\"]\n",
    "\n",
    "print(f\"Question: {question}\")\n",
    "print(f\"Answer: {answer}\")\n",
    "display(chart_image)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Define the Crop Tool\n",
    "\n",
    "The crop tool uses **normalized coordinates** (0-1) so Claude doesn't need to know the image dimensions:\n",
    "- `(0, 0)` = top-left corner\n",
    "- `(1, 1)` = bottom-right corner\n",
    "- `(0.5, 0.5)` = center"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def pil_to_base64(image: PILImage.Image) -> str:\n",
    "    \"\"\"Convert PIL Image to base64 string.\"\"\"\n",
    "    if image.mode in (\"RGBA\", \"P\"):\n",
    "        image = image.convert(\"RGB\")\n",
    "    buffer = BytesIO()\n",
    "    image.save(buffer, format=\"PNG\")\n",
    "    return base64.standard_b64encode(buffer.getvalue()).decode(\"utf-8\")\n",
    "\n",
    "\n",
    "# Tool definition for the Anthropic API\n",
    "CROP_TOOL = {\n",
    "    \"name\": \"crop_image\",\n",
    "    \"description\": \"Crop an image by specifying a bounding box.\",\n",
    "    \"input_schema\": {\n",
    "        \"type\": \"object\",\n",
    "        \"properties\": {\n",
    "            \"x1\": {\n",
    "                \"type\": \"number\",\n",
    "                \"minimum\": 0,\n",
    "                \"maximum\": 1,\n",
    "                \"description\": \"Left edge of bounding box as normalized 0-1 value, where 0.5 is the horizontal center of the image\",\n",
    "            },\n",
    "            \"y1\": {\n",
    "                \"type\": \"number\",\n",
    "                \"minimum\": 0,\n",
    "                \"maximum\": 1,\n",
    "                \"description\": \"Top edge of bounding box as normalized 0-1 value, where 0.5 is the vertical center of the image\",\n",
    "            },\n",
    "            \"x2\": {\n",
    "                \"type\": \"number\",\n",
    "                \"minimum\": 0,\n",
    "                \"maximum\": 1,\n",
    "                \"description\": \"Right edge of bounding box as normalized 0-1 value, where 0.5 is the horizontal center of the image\",\n",
    "            },\n",
    "            \"y2\": {\n",
    "                \"type\": \"number\",\n",
    "                \"minimum\": 0,\n",
    "                \"maximum\": 1,\n",
    "                \"description\": \"Bottom edge of bounding box as normalized 0-1 value, where 0.5 is the vertical center of the image\",\n",
    "            },\n",
    "        },\n",
    "        \"required\": [\"x1\", \"y1\", \"x2\", \"y2\"],\n",
    "    },\n",
    "}\n",
    "\n",
    "\n",
    "def handle_crop(image: PILImage.Image, x1: float, y1: float, x2: float, y2: float) -> list:\n",
    "    \"\"\"Execute the crop and return the result for Claude.\"\"\"\n",
    "    # Validate\n",
    "    if not all(0 <= c <= 1 for c in [x1, y1, x2, y2]):\n",
    "        return [{\"type\": \"text\", \"text\": \"Error: Coordinates must be between 0 and 1\"}]\n",
    "    if x1 >= x2 or y1 >= y2:\n",
    "        return [{\"type\": \"text\", \"text\": \"Error: Invalid bounding box (need x1 < x2 and y1 < y2)\"}]\n",
    "\n",
    "    # Crop\n",
    "    w, h = image.size\n",
    "    cropped = image.crop((int(x1 * w), int(y1 * h), int(x2 * w), int(y2 * h)))\n",
    "\n",
    "    return [\n",
    "        {\n",
    "            \"type\": \"text\",\n",
    "            \"text\": f\"Cropped to ({x1:.2f},{y1:.2f})-({x2:.2f},{y2:.2f}): {cropped.width}x{cropped.height}px\",\n",
    "        },\n",
    "        {\n",
    "            \"type\": \"image\",\n",
    "            \"source\": {\"type\": \"base64\", \"media_type\": \"image/png\", \"data\": pil_to_base64(cropped)},\n",
    "        },\n",
    "    ]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's test the crop tool manually:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cropped to (0.00,0.00)-(0.40,0.35): 167x140px\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Crop the legend area (top-right of most charts)\n",
    "result = handle_crop(chart_image, x1=0.0, y1=0.0, x2=0.4, y2=0.35)\n",
    "print(result[0][\"text\"])\n",
    "display(Image(data=base64.b64decode(result[1][\"source\"][\"data\"])))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## The Agentic Loop\n",
    "\n",
    "Now we connect everything: send the image to Claude with the crop tool available, and handle tool calls in a loop until Claude provides a final answer."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "def ask_with_crop_tool(image: PILImage.Image, question: str) -> str:\n",
    "    \"\"\"Ask Claude a question about an image, with the crop tool available.\"\"\"\n",
    "\n",
    "    messages = [\n",
    "        {\n",
    "            \"role\": \"user\",\n",
    "            \"content\": [\n",
    "                {\n",
    "                    \"type\": \"text\",\n",
    "                    \"text\": f\"Answer the following question about this image.\\n\\nThe question is: {question}\\n\\n\",\n",
    "                },\n",
    "                {\n",
    "                    \"type\": \"image\",\n",
    "                    \"source\": {\n",
    "                        \"type\": \"base64\",\n",
    "                        \"media_type\": \"image/png\",\n",
    "                        \"data\": pil_to_base64(image),\n",
    "                    },\n",
    "                },\n",
    "                {\n",
    "                    \"type\": \"text\",\n",
    "                    \"text\": \"\\n\\nUse your crop_image tool to examine specific regions including legends and axes.\",\n",
    "                },\n",
    "            ],\n",
    "        }\n",
    "    ]\n",
    "\n",
    "    while True:\n",
    "        response = client.messages.create(\n",
    "            model=MODEL, max_tokens=1024, tools=[CROP_TOOL], messages=messages\n",
    "        )\n",
    "\n",
    "        # Print assistant's response\n",
    "        for block in response.content:\n",
    "            if hasattr(block, \"text\"):\n",
    "                print(f\"[Assistant] {block.text}\")\n",
    "            elif block.type == \"tool_use\":\n",
    "                print(f\"[Tool] crop_image({block.input})\")\n",
    "\n",
    "        # If Claude is done, return\n",
    "        if response.stop_reason != \"tool_use\":\n",
    "            return\n",
    "\n",
    "        # Execute tool calls and continue\n",
    "        messages.append({\"role\": \"assistant\", \"content\": response.content})\n",
    "\n",
    "        tool_results = []\n",
    "        for block in response.content:\n",
    "            if block.type == \"tool_use\":\n",
    "                result = handle_crop(image, **block.input)\n",
    "                # Display the cropped image\n",
    "                for item in result:\n",
    "                    if item.get(\"type\") == \"image\":\n",
    "                        display(Image(data=base64.b64decode(item[\"source\"][\"data\"])))\n",
    "                tool_results.append(\n",
    "                    {\"type\": \"tool_result\", \"tool_use_id\": block.id, \"content\": result}\n",
    "                )\n",
    "\n",
    "        messages.append({\"role\": \"user\", \"content\": tool_results})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Demo: Chart Analysis\n",
    "\n",
    "Let's ask Claude to analyze our chart. Watch how it uses the crop tool to examine specific regions."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Question: Is Cyan the minimum?\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaIAAAGQCAYAAADsuWTJAABTNklEQVR4Ae2dB3yUVfb3z2Rm0kMSWkJHUEGQal3sdRHsgqKuZVFR2bUXFlRAQdAVfXX928uqu5Zdxa6r4rJYFl0LIFgA6TWkk0zK9PecByaEJBOmPM/MfZ75XT+PmXnmlnO/92HO3HvPPccWDAaPI6Lj+UICARAAARAAgYQTcHCLx/M1ky8kEAABEAABEEg4gbSEt4gGQQAEQAAEQKAZASiiZjDwEgRAAARAIPEEoIgSzxwtggAIgAAINCMARdQMBl6CAAiAAAgkngAUUeKZo0UQAAEQAIFmBKCImsHASxAAARAAgcQTgCJKPHO0CAIgAAIg0IwAFFEzGHgJAiAAAiCQeAJQRIlnjhZBAARAAASaERDPClGlX567khp2rImqTPPMWUX700FXPNv8Fl6DAAiAAAikMIGoZ0TxKCHhHG/5FB6rqLq+bNkyOuecc+jJJ59st9xPP/1EEydOpFNOOYXOO++8dvPiQxAAARAwgkDUisgIIVBn7ARef/11TYlMnjx5r0pWrVpFLpeLfvjhh6b7beUdPHgwXX755U158AIEQAAEEk0g6qW5RAuI9mIjcPbZZ1OHDh1o6NChsVWAUiAAAiCQIALKKaLnn3+e3nnnHRo+fDgVFBTQ9u3baeDAgdryUYKYmKaZzz//nN5++21N3s2bN9N1111HI0aMoCOOOIIeeOAB2rp1q6aM5s+fT+HyyrJcW6m8vJyeffZZWrt2LaWnp1N2djZde+211K9fv7ay4x4IgAAIxExAOUUkX4yfffYZjR8/ng4++GDy+Xx06aWX0gEHHEDHHHNMzB21YsFjjz2WduzYQU8//TT16tWLHn300aZuCsdZs2Y1vW8vb1Om3S+8Xi9NmTKFNm3aRPfddx8NGTKEzj//fLr55pvpxRdfpPz8/JZF8B4EQAAEYiag/B6Rw+GgHj16kPzil0t+6T/33HN077330ooVK7SOz5s3j8aMGUNvvPEG/elPf6LRo0fTu+++S+PGjaPVq1dTfX093X333XTLLbfEDCqVCi5dulRTQtLn/fbbT5sRde/enerq6uijjz5KJRToKwiAQAIIKK+IqqqqtOUhmR3JL/wLLriArrjiCrrmmmu09/Lr/dZbb9V+pefk5Gi/4GWJauzYsdS1a1cNoSwrwSIs8qeppKSkKbPMjK6++mqqrq6mwsJCqqioaPoML0AABEBADwLKLc2FOiUWXgsWLNAsv2644Qbq1q0bbdiwgd56661QFioqKiLZy5DPJI0cOVL7K0ooVZLNZou4q5HmFa6hNGfOHOrSpYv2tqamhiKtI1Qef0EABEBgXwSUVUShPaJQB8rKyigYDGob5rJ5LsntdmvLRqE8Tqcz9FL7K1+agUBAey17TVZMubm5Wrc8Ho/296677iJR3G2lSPOKoYgsxW3bto2+++47Ou2007S9umnTptFVV11Fw4YNa6t63AMBEACBmAgovzQX6lXnzp2pb9++tGTJEu2WKJapU6dqyimUp+Xfjh07UmVlpXZbrL+smI466ijNmECMFmQPTPosr8X6UJLs68ycOVN7HWnejIwMuv/++0kMHP72t7/R7bffTjNmzKAzzzwTSkgjif+BAAjoScDGs4wZXOHMSCtdMuf4SLOGzTdy2qKwn4lVliy/iRny6aefToccckhTXjFWeOaZZ6i4uJgaGho0owQ5kClGClLuuOOOo4svvrhpqU68C7zwwgt00EEHkcyWPvnkE80CTwwbkEAABEAABNQgoJwiUgMLpAABEAABEEgUAdMszSUKCNoBARAAARBILAEoosTyRmsgAAIgAAItCEARtQCCtyAAAiAAAoklELUiknhC8aR4y8fTNsqCAAiAAAioRyDqc0QIaqfeIEIiEAABEDAzgahnRGbuLGQHARAAARBQjwAUkXpjAolAAARAIKUIQBGZZ7jrzCMqJAUBEACBsARcLT+BImpJRN33QXVFg2QgAAIgEDGBXQ4ym2WHImoGAy9BAARAAAQSTyBqq7mr5myntVu8MUvav6eTnpm2K2xDzJWgIAiAAAiAgGUIRD0jikcJCbV4y1uGPDoCAiAAAiCgEYhaEYEbCIAACIAACOhJAIpIT5qoCwRAAARAIGoCUe8RRd1ClAUkoNs777xDEiVUgrzt3LlTiw46ZcoUysnJibK29rN/8MEH9PLLL9Ott97aFGY8VOLnn3+mv/71r7RlyxY68sgjSSKgrl+/nsaNG0cnnngitVc2VAf+ggAIgAAI7JuAcjOiiRMnUkFBAUmocAl5PX36dK0XEixP7zR27Fjq06dPm9UOGjRIC7zXq1cvTY7bbrtNC6r3yCOPaFFh2yvbZoW4CQIgAAIg0CYB5WZELaXkCLJUU1NDtbW1TR/JLEbCYWdmZmpK4eqrr6Y333yTnn32Wbrwwgvp97//PX344Yf0z3/+U1MiEi77s88+o6KiIiotLdWiuIZTQE2NtPGiurqaCgsLyWaz7fVpeXk5Pfzww9q92bNn06JFi+jpp58mmcUNGzZMu//qq69SVVWVVlbCnF977bXkcCiPf69+4g0IgAAIGEFAuRlRqJOvv/46zZs3jy666CJtWezss8/WPvr8889p6dKldPPNN9PkyZO1ZTsJFX7++edry2v9+/fX8vXu3ZvOOeccLeR4VlYW3XjjjXTllVdq+Z566qlQM/v8K0tzjz/+ON1///302muvkcyMWqbOnTtrYc1D948//njq2bNn6C198cUXtHbtWk1eUUCiiGT5EQkEQAAEQIBI2Z/ksjR38MEH0/vvv0/19fXUrduus0fffvstDR48uGnsJI/MfiZMmEBnnHGGNjM69thjacGCBSQzJUlS9plnniGn00lut1vb92mqYB8vRKGIwpO0detWuv766+mxxx6j4uLifZTc87HIXFJSQrKsJ0n2vWR2hAQCIAACIKCwIgoNzujRo7W9mVGjRmmzjJbLYqF88vc3v/mNNnuRGVNGRgZlZ2drH8+dO5fOO+88kplKWVkZLVmypHmxiF/36NFDW5pbvnx5K0UkcskyYijJrKd5GjFiBF1xxRXaLcknxg9IIAACIAACRMouzYUGR/ZRTj/9dJI9FkmHHnoo/fTTT6GP6ccff6TDDjtMe5+WlkZiRDBr1iwaM2ZMUx7ZY+rQoYP2XvaIYk0yMxNFJgqpZRILv4qKCu221+ulTZs2NWURmUX5hRTVRx99pM3YmjLgBQiAAAikMAHlluZefPFFbelq/vz52lLagAEDNOVyySWXaMYJkyZNos2bN2v7RzLrsdvtmkl1aAx/+9vf0vfff099+/YN3SIpI2bhX3/9tbY/I4YPUr/MmERhyH6NLMF17dq1qczKlSs1ZSF7RI8++qh2f9u2bSRyyNLgv/71r73K7r///pqCuu+++7TZkigrsfSTv7JUKDLPmTOHOnXqpNUlMiGBAAiAAAgQ2fhX+gwGMTNSGCdO3vNLP9IyLfMtfLx3y1txv6+srNTOGX333Xfk9/u1L/+4K1WrAheL08prrVoiQhoQAAEQiJ6AcjOi6Luwq4Qs0YnRgpxBuv3222OtBuVAAARAAAQSTMAyikiWv+RCAgEQAAEQMBcB5Y0VzIUT0oIACIAACERLIGpFJPGE4knxlo+nbZQFARAAARBQj0DUS3MIaqfeIEIiEAABEDAzgahnRGbuLGQHARAAARBQjwAUkXpjAolAAARAIKUIQBGl1HCjsyAAAiCgHgEoIvXGBBKBAAiAQEoRgCJKqeFGZ0EABEBAPQJRW8098sJ82r5jl3PPWLrTragT3XD5ebEURRkQAAEQAAELEoh6RhSPEhJ+8Za34BigSyAAAiCQ0gSiVkQpTQudBwEQAAEQ0J0AFJHuSFEhCIAACIBANASUU0QSN+iss86iGTNmtArpLQHuLrvssqYAc+E6unr1arrllluaQnO3zPfUU0/R66+/3vJ203sJ6y3B9R5++GHtmjJlCv3nP//RPpeyEvNIQk20lxoaGrTQ5e3lwWcgAAIgAAIKRmidOHGiFsph/PjxWrC65oMkUVbvv/9+ai9cuOQ/8MAD6eSTT25eNKrXTz75JB1zzDF04403apcEw5Pw4JKuvvpqLRhfVBUiMwiAAAiAQFgCUVvNha0pAR+8/PLL9Nprr5FEcZXQ3BJFVWYovXr1ovz8fC0i6qmnnkrXX3+9Jo3L5aIHHniA1qxZo4UTv/LKK2nFihW0dOlSLdqrzHwktHi/fv32kr6uro527NjRdE8isvbu3XYwvxdeeIGqq6u1aK87d+6kP/7xj5SVlUUvvfSSFg1Wort26dKFJkyYoEVpFflFdmn7zDPPpCFDhjS1gxcgAAIgkIoETKWILr74Ynr//fe1ceLIsjR37lxtxjJixAhNKcmX/FVXXdU0juvXryeZ3cgy2vnnn08XXnih9sUv+UUZyKyrrSQzoHvuuYc+//xzOuqoo7Q4RxJKvK0kSiwUB0nCj7/77rt0wQUX0KWXXqrJet1112nFRF5Z7rvzzjs1pVZRUUHXXnstiXJ1OuPzaN6WXLgHAiAAAmYhYCpF1BxqaWkpbd++vWlGMWDAAHI49u5O6J7c79SpE1VVVWnhxJvX09broUOH0quvvkrffPMNLV68mCZPnqzNaC666KJW2WW5UGZdOTk52oync+fOrfLIjfLyctqwYYM2awtlKCoq0u5369YtdAt/QSBhBAIBonp3gOobg9TQyH/dQQoEgpTutFFmuo0y0tMoS/tr0+4lTDA0lHIE9v7mNlH397VPJF1JT09v6pHdbt+nkUMosyzl7b///tpsSGZEY8aMoWnTplFLRSRLf3fddRfJ8pwoun//+9+0ZMmSUDWt/sqsSGZBIbncbnfT61aZcQMEoiCw0xWgzTu8tImvypoAlVf5SO7VNgTIVS/KJkCNnqB2eX3Ey8YBYp1D9jQbOexENv6bZguS05FGHm+Q/62QppT8u//KezubNjn483T+1hBllcFX10I7FXawU59iJ3Xr7KDiTg4q4qtLAVeKBAIREjCFIiorK9Os3GRmEkqy79K9e3fNiGDkyJEklnI+H/8LiyDJUliAfw5WVlZq+0eHH374XqXEck/2eqT+UJL2WiaxjJM2ZTYkSWZpoSRtiOKRJApKlu/69u2rKaojjzxSKzd16lSaN2/ePo0vQnXib2oTkBmMKJuNJV76Zb2H1m310JZyH1VU+zXF4XTYeBmayMNKZvejt09gPtY0Ps0AdNezSqS9abOc5PP5WaG593y8tWzXvzmbjViJsTJjZRXQZAhSh+w06lTgoO6d7dS3ezrtX+ylw3pVUHa3AXsqwCsQYALKKSIxRJBNf9lvCZlMNzY2al/2sp8isxBRFDfddJM2S3niiSdowYIF1KdPH8rIyNCW5zZt2kQLFy7UjAjEMEGW8GRPRsrfeuutdMQRR2h1rFq1is4555xWD8KoUaM00+8ePXpon8mymphwS3r22We1PadnnnmGrrnmGm0/6I477iBZBty8eTNt3bqVvv76axJlI+089NBDWv6TTjqJpk+fTlJOZk2ixK644gr+h8v/cpFAoAWBn9a6ad02L63e5KE1rHC2s8KprQvw823TFEdQpjMtktfX+l6LLIa9FcUnM6nmqYZnYjX1Hlq/jei/KxooK81Lk4r+Qr3SfqaMwu6U0+0gyut3KOV0P4gyO/dpXhSvU4yAjX+1z+A+z4y033+6/+lIs4bNd9+USWE/i+YDUTLDhw/XZhRi5SbLZ88991w0VZgpr4uFzTWTwJA1cgI/r3fTNz810lf8hf3rZg91zLeTixWPJ4nKJXLpI8uZbvPQlOLbKN9etacA/xBLS3PwDC7AyqkH5fYaSh32O4yyuw+g9A5Fe/LhlaUJKDcjioa2WMV9/PHHVFhYqC2L3X777dEUR14QSBoBUTZfLGugr1nxrN/m0fZmGj289rY7Ve4Mv0QWymO2vwFK21sJSQd4vTEQ8GhdaSzfSHJVrPiYeJGPTzmmUQeeMeX1GUEFBx5NzrzWy+NmYwB52yZgakV07rnntt0r3AUBxQhs3O6l735uoM+WNtAqXm6TPZXmS1n+ZkpIMdF1E6ejoyKiuoI+D4UW+apXfk41a/5HW/79JKVnF1DBoBOocNCJlF18YER1IZM5CJhaEZkDMaRMVQLf/NxIXy6rp4Xf1WtfrG7eQwmIGVqKpm7pW2LqecC3yzrCXbODdnz9GpV9/5aY+VGHvodS55Fn8Kzp8JjqRSF1CEStiCSeUDyhHKQ8EghYlcDaLR5667NaTfnYedZTx2d0kHiVjU3Dezl/1QVFwLtLMVWv/oJ2rvuagmwqKHtLnYedRvm8hGfP2GXFqktjqCQhBKI2VkiIVGikLQIuvgljhbbIJPleda2f3vxPLX34lYvqGojcKbDMFi3yLIeHLs5/lAZm/RBt0Yjzpzky2OiBlVLvodRl5DlUMOCYiMsiY3IJRD0jSq64aB0E1CHw0dcueuPftXyux8cm+pj5tDcycgaqq3Nre1ni/iy0hFe7fgnVbf2F6D2iLsPHUtcjJ5Azt3Pc9aMC4whAERnHFjVbkMCy1Y00f2Et/Xd5A3skkDM9UECRDLMvYKeOjvJIsuqSJ+DhqSmnHd/Mp9Lv36WsLn2p+OhL2PoOsyRdAOtcCRSRzkBRnTUJ/P2jnfQWL7+5veyfjd3lSIISinysCxxVkWfWNSe7K/J7qL5kNW146x72U+RkA4ezqPjIC8jBVnhIahCAIlJjHCCFggRkOenpt6t4+c3F53x476eF5wAFRVZWpG7p25IuW8DPvyL4KvvmH1T23XzK7TGIin5zMVvdHZZ02VJdACiiVH8C0P9WBBrYC/Xjb1TRh4tdbO1lY+egQW0m1CojbkREwCYWcw59LOYianAfmYLyC4MP0dZuXMYzpV/5oGxn6n7cFWzccOw+SuJjowhErYhGsCTL4pBmOJddGkd5FAUBowiI9dvDr1XRf3+oJ23rh7d//JF6DzVKKAvUm8E+5orSNyvZE7+7juTa+P59tPXTx6nHqTdQwQG/UVJWKwsVtSJaFieNeMvH2TyKg0ArAjsqffToP6s0X2/Y92mFJ/4brMyLHMlfmmuvI343//jga8PbM8mZXUg9R99I+f2PbK8IPtORQNSKSMe2URUIJJXAJg6n8MT8alrKlnDN3e0kVSgLNu4OOKmLo8QUPZPDsu6dJbR+/nResutKvcfcovm6M4XwJhYSisjEgwfRYyNQwQ5FH/1nNX37S4MWmTS2WlAqUgIFjupIsyqTL8D+7txVW2jtP/+keQXvfdotlNNjsDLyWU0QJRWRhNR+5ZVXSKKqSjRTCTgn4bsvuOACxO+x2hOY4P48Mb+K3v3cpYVXwPZPYuAXp29PTEMGtCIzpIbSdfTrq7dpZ5F6j76JsooOMKCl1K5SOUW0bds2kkBzf/7znykUmK6qqoquvvpqOvvssykrKyu1Rwy9j4nAYg63MPev5ayAiJIZQC4m4U1cKI3dvfZUyGIuVpQBTz17a/iZ1rw+TVuq63vGtFirQrk2CCiniP7xj3/Qb37zmyYlJDJLvCGJrCrB70RBSQjuG2+8kTp16kRz5swhCeMtYbclAqooL4/HQx06dKDLLrtMi+h65513Uk1NDR1zzDH0ww8/aJFcZ8+eTRLOG8naBGo5SujUx8pInJHiHFDixzrd7qNip5oWc7HQ8NaUUdVPC6nq54UkykhCUiDFTyAt/ir0rWHlypXUu3fvVpUefvjh1LdvX/rDH/5APp9PC83duXNn6tq1K912221a/pNPPlmbOV133XW0du1akrpyc3NJAuZJuPDRo0fTww8/rCmy77//vlUbuGEtAk/yMtx5U7aSRD+FEkrO2HLgCypW3GIuWjLBgI+9Nfho4wd/ppUvXEP+xtpoq0D+FgSUmxG1kK/V28GDB2v7RDKz6dixI3Xv3p0cjl3d2LlzJz344IPa8p0oni1bttDAgQO1OmT21K1bN+21zJoqKiIL0tVKANxQnsCSlY10z3Pl5Grgr8EAfMElc8Dc/gwqMtjZabL6F/A2Uv22lbT84XOoeNRF1O3YickSxfTtKqeIBgwYQJs3t57Kyz1ZgsvMzKSzzjqL3n33Xe39uHHjtEH45ptvtHtPPfWUpqgeeugh/hLiE9S7kxg9hFIahyCW5T0kaxEQE+zpT5XR8jVuavRgfFUY3XzHThXEMFQGmSGVLH6Zyn/4kPY/fy6MGWKgrdzS3IUXXkhfffWVtpQW6o/MbGbMmKFZ0cm9k046SdvrcblcJMtzkmprayknJ6fJqk4s7ZBSh8Ab7JB07E2b6ZtfGqGEFBr2rk5znB+KF1kw4CdvbTmteul6zUtDvPWlWnnlZkSyfPbAAw/QSy+9pCkVmcnU1dVRc+OCjIwMOuqoo+jEE/dsFB599NG0aNEiuueee6ioqEgzTvj000+1vaRXX32VxPLu/fffp169etGKFSto48aNdPDBB2v7Tqk26Fbr7zX3ldDWMo4JtGcCbLUumrI/NraY6+Vca0rZYxU64G2gyh8/papf/kP9zpsNh6oRgow6QitHP447xbNoIns/oqzmzp2rWcrFLYx5KnCxqIjQ2my8lv3aSLc8XMpfd5zieaia1YmX+hHIsHtpXMGzNCLrK/0qNVFNztyOWvyjXnz2CKl9AsrNiNoXl0j2fsQ0+5RTTtlXVnxuYQKPvV7J3rHreK/Pwp00edfYbzkV2beYvBexi+91VVL5io+oZsMSGjTpBbKl2WOvzOIlTTcjsvh4tNc9zIh207ns7u20rRzhudt7WFT4TA6zzu0xkew2vwriJFUGG4cT6T9+LnXYH45U2xoI5YwV2hIS90BACHz7UwOdOHkTbd7hJT9CdCv/UGTbXVBCu0dJrHTXvTWDNv1rnvLjlgwBo1ZEw+OUMt7ycTaP4iYl8Mg/Kumup8tNKn1qit3VuSM1Ox6m1+K3ruKHf9FPT10SJkfq3o5aES1lVrIsH+sl5ZFAIBoCv5+1nT74sg6hGqKBluy8bNXUK31dsqVQrn0x83ZXbKYlc46n2g3fKydfsgSKWhElS1C0m3oElq5ya0txG7d7CQHrzDX+GWk+6ubYYC6hEyztOo55tOXfTya4VTWbM53VnJoYIZXeBF75aCe9uqBG72pRX4IIpJGPo7JuTVBr5mxGQpSXL32bPJWbqd/4e83ZCZ2kxoxIJ5CoRj8CD/y9kl77tJbq2FcckjkJSFTWYqfa4cFVIBvwNFL12v/Rj4+OV0GcpMkARZQ09Gi4LQK3PVpKC7+tIxeHb0AyL4HMtEZy2tzm7UAiJWdfdZ7aMlr259+yV29vIltWpi0oImWGAoJcMXs7LeN9IYRsMP+z0NUBX4/RjmLA56alrIzclam3pBm9IhoxgogPZ8V8SXkkEGhB4Lw/baX12/h8EMI2tCBjzrc90tebU/BkSx0M0M/PXk41675NtiQJbT96RbRsWXwCxls+vtZRWjECEqlj9I2bqaoGp+8VG5qYxUlP81N3BxRRrACDPi+tm38nnzn6INYqTFcuekVkui5CYFUJlFX66OQ/buLQ7jBKUHWMYpErzcbhwWExFwu6pjJy+HXzJ/9HJV++0HTPyi+giKw8ugr3bdVGD/1u5naFJYRosRLwBuyWjcoaK5NYyklIiZKv/kGbPnwwluKmKqPcOaLnn3+e3nnnHRo+fLgWClzCf/t8PpoyZYoW+C5Sus899xy9/vrr9NZbb2mhwyMth3zGE/jv8ga696/l5PVhJmQ87cS3kG7zUmZaQ+IbtmCLWnyjnz7RrOn6nPEnC/ZwV5eUmxFNnDiRCgoKaPz48XTDDTfQ9OnTNUlFoUSTrrjiCnI6ndEUQd4EEPh+ZQPd92IFNbqhhBKAOylNdHKWJaVdqzYqy3RVPy+kTR/82apdJOVmRC1Ji9fampoaLRR46LNQxFVxrS6zpWuvvZYcDgetXLmSnnrqKSouLkbk1RAshf7+9wdWQi+V46CqQmNihCg90jcaUW1K1xnwe6jyp3+Tn5fr9jt7huVYKDcjChGWZbV58+bRRRddxJvZHjr77LO1j7744gtau3YtTZ48WVNAoohkKU8UlkRtvfTSS7VlvGHDhlFjY2OoOvxNMoH/cQiH+16qgBJK8jgY3byDLeZ6OtYa3UxK1i/njHb++hXvGVkvlISyMyJZmjv44IPp/fffp/r6ei08uDx93377LZWUlNAjjzyiPYyyh1RVVUWlpaUkYcSHDBmi3R8wYIA2S9Le4H9JJbBms4fufrYcy3FJHYXENO4kLxsqwLWPUbQD3kaq/HEB2TNyqMdJ1xrVTMLrVVYRhUiMHj1am+WMGjWKevbsqd0ewYdiZQ9IksyEZMYkCglJPQKVfD5o8p9L2Hu2erJBIv0J+IJsMQfTbf3BNqtRZkZl379N9sxcKj7qkmafmPelsktzIaSy93P66aeT7AtJOvTQQ2nJkiWaApL3H330ES1YsIC6dOlC3bt3p+XLl8ttWr16tbZ/pL3B/5JCQA6rjp+6FUooKfST02iaLUA5abXJaTyFWhVlVLL471SxzBqHXpWbEb344ova7Gb+/Pma1ZsssY0dO5YuueQSyszMpEmTJtHmzZtpzpw51KlTJ+3Rk3tiuDBt2jR64oknaNGiRZrlXUZGBj3zzDN0/fXXp9Ajqk5XT795M/9gUEceSGI8gY4ORNE1nvKuFrRDr5/+HzlyCin/gFGJataQdmy8tCUmGDMjrl38zMWb8O0UC0EXF8qNpWAyyshMqGIn1uOSwT6ZbR6a+xVNKHgimSKkXNv29Cza/6IHKaf7INP2XfmlOdOSTWHBJ80tgRJKwfF3pAXYYm5NCvY8uV32exro11duZq/dW5IrSBytQxHFAQ9FWxOY+lip5kW79Se4Y3UCTvaoUORMvRAGKoyrBNj79dVbyddozv05KCIVniKLyPDQq5W0bLWb/H5sDFlkSKPqhj9oY4s5mG5HBU3HzJ6dJfTzU5fqWGPiqopeEbEPuLhSvOXjahyFjSLwxsJa+mxJPYLaGQXYBPUGWRF1sFebQFLriuhvqKE1r91mug5Gr4iWLpXDO7FfUh7JUgR+We+hF96vpto6ttdGSlkChc6KlO27Kh0PBvzk2rycw0e8pIpIEckRvSKKqFpkSiUC1z9UQvWNWI5LpTFvq689nObdLG+rP2a9J2bd2xe/rCkks/QBisgsI6WonNfcV8J7QooKB7ESRkCzmHP+mrD20FD7BIJ84HX1325oP5NCn0IRKTQYZhPl6beqaN1Wr9nEhrwGEHDaPHDtYwDX+KoM0o+PTYivigSVhiJKEGirNbNijZveXORi9z1YkrPa2MbSH38wDeHBYwFncBlPTRlteGeWwa3EXz0UUfwMU7KGmx/eQR4vlFBKDn4bnfYH0qjAAWOFNtAk91bQz6EjFlO54j7poIiS+5iYsnXxnOCHgZwpx84ooTumVxpVNeqNk4B4Xtjy6aPkrlL3jBcUUZyDnGrFn393J23c7km1bqO/+yBQjIOs+yCU3I/F88K6N6YlV4h2WociagcOPtqbwKqNHpq/sIa8vr3v411qE7DbgtQLFnPKPwTuii204d05SsoJRaTksKgp1PUP7qAGD/aF1Byd5EnlTPNSMc4QJW8AImw5EPBR9eovlTxfBEUU4SCmerZbHimFD7lUfwjC9F+iJCMqaxg4it0OeOpp7T+nKiYVERSRckOinkAfLXbR6k0eCmAypN7gKCCRJ+ikTo5SBSSBCJEQEOOFDe/NjSRrwvJAESUMtXkbmvdKFdU1wEzOvCNorOSFjipjG0Dt+hIIBqj6l0VUt+1nfeuNozYoojjgpULR2X+tIA7jmwpdRR9jJFDsVNcsOMYuWb5YgF0ArfnHn5TpJxSRMkOhniBrNnvovz80EJwnqDc2qkhksxH1diIqqyrjEY0cAXcdbfn44WiKGJYXisgwtOav+M4ny8jtwZKc+UfSuB5kpImPuc3GNYCaDSMgISPKl39MjeUbDGsj0oqhiCIllWL5Xvm4hip2wq12ig17DN2FxVwM0JQpEvA2cCC925MuDxRR0odAPQFkS+jZd6vhxke9oVFOIrc/g7o6tysnFwSKnICvvoa2ffZc5AUMyAlFZABUs1c59fEyjsBr9l5A/kQQ6OCoTkQzaMNAAgFfI5V9/yb56pM3llBEBg6wGav+ca2blv/qNqPokDkJBIoxG0oCdf2b9LsbaNOH8/SvOMIaoYgiBJUq2e5+tpwaYaCQKsMdVz9tmo85WMzFBVGVwny2qGb9d9RYsSkpEkERJQW7mo2++kkNuephJafm6KgnVYbmYw4Wc+qNTGwSBbyNtDFJHhegiGIbM8uVcrMz0+ffqyY3gt1ZbmyN6pCNf0UXObcaVT3qTQKBhtJ1VLtpecJbhiJKOHI1G3z4tUrYJ6g5NMpK1RjIoGI7FJGyAxSDYOJxYeP798VQMr4iUETx8bNE6Zq6AC38rp74fBsSCERMIM9eQzYblnIjBmaSjN7acqpeuSih0kIRJRS3mo09+WYVnxmCvbaao6OuVF2dO9QVDpLFTCDo99Dmjx6JuXwsBaGIYqFmoTKyN/TJ/+oogB+2FhpV47siPuZ6pq81viG0kBQCfk8dlS99N2FtQxElDLWaDT02vwpKSM2hUVoqsZjr5tiotIwQLnYCAZ+Htnz6ROwVRFkSiihKYFbKLq58PvjSZaUuoS+JIhD0c3hwhH9IFO6ktMNjvH3x3xPSNBRRQjCr2chjr8NSTs2RUV8qTzAd4cHVH6a4JJRZUcXS9+OqI9LCUESRkrJgvrc/49kQbBQsOLLGdykrrZ4cNq/xDaGFpBLw1VexH7q3DZcBishwxGo28ML71cS2t2oKB6mUJ9DVWaq8jBAwfgIBr5tKFv8t/or2UQMU0T4AWfXj1z6pZSMFTIesOr5G96unc53RTaB+RQj4G+uoduMSQ6WBIjIUr5qVv7GwllfkoITUHB31pcqwe6m7Y4P6gkJCXQiID7pti57Vpa5wlUARhSNj4fsvfrCTvD4LdxBdM5RAGltTwcecoYiVq7y+5Ffy1nKcMoMSFJFBYFWt9mM+vIrJkKqjYw65PEEnLObMMVS6SRn0e2mrgbMiKCLdhsocFf39XzuprhFuFMwxWmpKmW5zU0Zao5rCQSrDCFT+uMCwuqGIDEOrXsWbSrxUWQMlpN7ImEuizunGLdGYi0RqSWuzpVHpd28a0mkoIkOwqlnpO5+7qNENRaTm6JhHql6O9eYRFpLqRiAY8FHpV6/oVl/ziqCImtOw+OtPvnaRuPVBAoFYCaTbfdTdCUUUKz+zl/O7xZR7me7dgCLSHamaFS5d1UhexBtSc3BMJJWdfLCYM9F46S2q39NAJV++oHe1BEWkO1I1K3z1kxryIAy4moNjIqm8ATsVO+Ds1ERDpruoDWUbyNdQo2u9UES64lS3su9XwspJ3dExj2R2jsialQaP7eYZMf0l9bvrqeqXhbpWDEWkK041K/vXYhe7lYNfOTVHx1xSdXbCYs5cI6a/tBLBtXzpe7pWDEWkK041K3tzEfzKqTky5pOqhxPB8Mw3avpL3Fi2kcRwQa8ERaQXSUXrqa7106YS+PNRdHhMJVa63U89HAgPbqpBM0hYMb6t+vET3WqHItINpZoVffBfF0KBqzk0ppMqjS3mip1bTSc3BDaAAJ8pKtNxeQ6KyIAxUqnK975wkR/hHlQaEtPK4g+mwcecaUdPf8HFek48c+uRoIj0oKhoHWu3eMjViBOsig6P6cSy8WnoXHuN6eSGwMYQsJGNKn/Sx/8cFJExY6RErf9d3kBuNxSREoNhASE6Oiss0At0QS8CQQ4HUrH0fV2qgyLSBaOalSzgkA9YllNzbMwoVXfnJjOKDZkNJFDHcYokRES8CYooXoKKlm/gmdCOSljLKTo8phPLkRagXs41ppMbAhtLIM3u5MOt/4m7ESiiuBGqWYH4lrPbcYhVzdExn1ROm5cNFeDax3wjZ6zEAZ+bKpZ9EHcjUERxI1Szgs+X1JPbg/0hNUfHfFL5OXpIV5hum2/gEiCxe+cOjvocn0dlKKIEDFQymvhuVUMymkWbFiUQYP/IBfZKi/YO3YqHgK+xhlybf4ynCnjfjoueooVr6gJU40IAPEWHx5RiFTqhhEw5cAkQOuhp5BhFS+NqCTOiuPCpWfjbnxvYWk5N2SCVOQl0d24xp+CQ2nACwSD/8F3zdVztQBHFhU/Nwot4fwiRWNUcGzNKZWeLuZ52WMyZcewSJXN9aXw+CKGIEjVSCWznx7WeBLaGpqxOIJ0t5orTMSOy+jjH1b80GzWyy59YExRRrOQULVex00/1jViXU3R4TClWgB+nrk6Ybpty8BIkdNDnpZr138XcGhRRzOjULLgEkVjVHBgTS+UlB3WyIyCeiYfQeNF5L2Dnmq9ibgeKKGZ0ahb88ocG8vpwfkjN0TGnVB0dVeYUHFInlEADu/uJNUERxUpO0XI//KqPW3ZFuwexkkCgOB3LcknAbromJSSEty42M38oItMNd3iBS6t8lJWBIQ1PCJ9ESyAtLUg9HbH/0o22PeQ3LwEOV0V1MR5sxbeWece9leQSEry2Pj5XG60qxY2UJpBh81CxAxZzKf0QRNj5oNfDBgvfRph772xQRHvzMPW7TSVeaoTltqnHUDXhA7wJXQSLOdWGRVl5XBuXxSQbFFFM2NQs9MsGDwUQFlzNwTGpVJ5ABnVxbDep9BA70QT83npuMnpjKSiiRI+Uge2t34bpkIF4U7LqAljMpeS4x9rpQCN7/a+O/ocLFFGsxBUst6MCgfAUHBZTi1SUHv2Xiqk7DOHjI2Czkbtqa9R1QBFFjUzNAm5vkCQqKxII6EWAvbZQLwd8zOnFMxXqERPuxkooolQY6zb7uHmHFxFZ2ySDm7ESSLd7qJtzc6zFUS4FCYgn7sYYDrZiRmSRh2Ujm277/JgRWWQ41egGO5lDVFY1hsJMUjSUrY9aXCiiqJGpWWDVBjdCP6g5NKaVyh3IpCI7vCqYdgCTJLinpiTqlqGIokamZoF127xqCgapTEsgz7GTbDbMsk07gEkS3FdfE3XLUERRI1OzwNZSWMypOTLmlaooPfpftubtLSTXi4DNlkZeV0VU1UERRYVL3cwVO6GI1B0d80nGVriwmDPfsKkhcVoam3BHt6QLRaTG0MUlhQTDs4utLRII6EQgw+6lbo5NOtWGalKJQNDv50Ot0ZlwQxFZ4AnZvMNHTgcUkQWGUpku2AJ+WMwpMxrmEiQY8JK7fGNUQkMRRYVLzcyyLOdHdHA1B8ekUjUGM9jrdnTLKybtKsQ2gEBD2YaoaoUiigqXmpnrG4PkxRkiNQfHpFLlpLnIbsO+o0mHL+liB33R+b2EIkr6kMUvQF2Dn3wIDx4/SNTQRKBr+o6m13gBAtESaKzcFFURKKKocKmZuaoWZz3UHBmTSqVZzK0zqfAQWwUCfq87KjGgiKLCpWbmnS5EZVVzZMwpVWaaWMxFt9lszp5CaqMIYGnOKLIK11tbD0sFhYfHhKL5OSprdOa3JuwkRDaQQNAfnacXzIgMHIxEVV0DRZQo1CnRjtfvhCJKiZE2rpNBdphL7Ik70gRFFCkphfPVN2CPSOHhMZ1oGWmNlG6Lbo3fdJ2EwIYSsLF3BT/HJoo0QRFFSkrhfG5P5L88FO4GRFOEQJf0UkUkgRimJcD+5gKehojFhyKKGJW6GT047qHu4JhQsp7O6OPJmLCbENlAAjZ2VijRWiNNUESRklI4n9uLGZHCw2Mq0TLsPurugCIy1aCpKCxmRCqOirEyeb3YIzKWcOrUnkY+NlSAa5/UGXFjeiqeL7FHZAxbZWuFex9lh8Z0gnn9DljMmW7U1BM4yJoIe0TqjYthEomzU7GURAIBPQg4+DBrlq1ej6pQRyoTYE0U8EZurOBIZVZW6Ht9Y4Ccdht54GvOCsOZtD5ISPCCzFI6a9kr1G0lvCokbSAs0nAgK50Co6GILDKc++5GULaHZEEWCQSiJJDldFFhVil1yiuhTEcNbdivG034v8cp3ROd5+Qom0X2FCAQdDrINo5DzQ+JrLOYEUXGSdlcGU4bxyKCsYKyA6SQYDLryc8qo665JZSXUUa2tCCHeghQcPcJ+B3FxfTZ8cfTKZ98opDUEMWMBGzpGUTZ2RGLDkUUMSo1M6azIsIekZpjo4JUWc46ys8upa45u2Y9ZLPzBNpHoZ8u2ox6t6C1+Xl056xZdOT//kd5O3eqID5kMDOBrKyIpYciihiVmhn53BjJ4bFg828UNUWFVAkgwD9LeNZTTp3zdlB+Rik/Gzzr4ZlPMBjy0L5HCbUUp4YV0Zq+A2lLr150EBRRSzx4Hy0BKKJoiZk7v8NOBC8/5h7DeKSXWU9Bdhl1llmPcyfPeHh9nrxtznraa8eVs+sX7NTZs+nlyy6jHCij9nDhs30RwNLcvghZ63PNag6HWq01qO31RizceNbThRVPXmYZpaUF9trroWZKqL1qWn5Wl5Wp3XrnrLOoLjMTiqglILyPnICs0GBGFDkvK+R0OmA2Z4VxbK8PmTLrYUODLmzhlmWv5vVYWVXf42RQj5XZxsz0JhFmTZ9O826/nTLq6pru4QUIREUAM6KocJk+s9Np+i6gA60I7Jr1dM7dQR1k1mPzt9rraVUkjhsBdtvvs/Ma7+70f5Mn04M33RR6i78gEB0BzIii42WF3OmYEVlhGPksz669ni5sXp3lrOY9HielNVtm02PWEw5UHe8POXx+8vL5j1B65Oab6ab/9//I4UZsohAT/I2QgJjyYkYUISyLZBMTbiRzEpDltl2zntLdez17LNyaGxwY3TtRRHbWdM0DPM+aNo1ueOgho5tG/VYk4GcrTewRWXFkw/epZ1cnrd/W/CskfF58klwCmY56tnArZeVTQtky67E5yRaUvZ5dJ3uMnPW01/O6nGy2tNs71ebl0dvjxtH4114jGw6r7Q0H79on4ONnGoqofUZW+7TZ0r7VumaJ/mjnenivJz9zx+69HlY7u8/12IJq/ICQGVHA3jo82Z0zZ9KY996j3NpaS4wFOpEgAvn5csAx4sb2LAhHXAQZVSPQowv/quYxT9avadV4JFueDGc9+3CTJbftu2Y9vNcjy2yhpOI41WdnkZcNFlqmXw84gJaPGEGjPv+85Ud4DwLhCRQUhP+sjU+giNqAYrZbXQvtJPtEbk/IcYvZemB+ebVZTw7PetiJqJ0t3MSPG4VmPc2UkKo9rS3oQIEwv2Cnstuf9/lsUV51tariQy7VCPToEZVEUERR4VIzc+cCOzk4FIS76Sy9mnJaSaoMba+HD5XyuZ5seyXv9Yg3A3Gjs/vHgMl+E9R2yA07PJ8feyyVdukCRRSWED5oRaB//1a32rsBRdQeHZN8Jooo8tVYk3RKQTHzM8upk+z17J712NnDQVBTPhKJY8/hUgVF36dItbnte0q+85576Lmrr6bsmpp91oUMKU5AlngPPDAqCFBEUeFSM3PnfDshXLj+Y5PhaKCCHPZmwK50sp0869HO9YjT0F3THZNNetoFVL/bvU+4TK9NmEBP8CHX9tVVuNK4n1IExFqud++outx6dzKq4sisAoHCDnbywNecLkPRgX249ev8M43suYiGdv+S+hau0pSQVL7rXI+V1M8eZA0Ze9z77Lm796s5d9xBnigOKe5dGu9ShoCD5zc9e0bVXcyIosKlbua8HDvVuEKu/tWVUzXJtFmP+HDTLNyqtHM97Oxmz6zHmnpnr2HQ3PuIC/d9pAduuYXuY/9zSCDQLgE5c8ahRKJJUETR0FI4b2FeGhRRhOOTn1nBez2lvNezgy3cfHv5cEukN4MIxTU8W1vufcI1+uQf/0hXP/EE2b17zNHD5cX9FCXQ0ABFlKJDTwP6pNPG7fhyaGv80x2NVJDJUUrFc3V6FWdhCzdWQKGDVyqe62mrH0bdkzNELd37hGtrxl130cSnn4YiCgcI94kyOEw4hxGJJmFGFA0thfMWFTrYVxkhbPjuMeqwe9ZTkFlCjjQfR8hmu8JAyLKNFXYKLLlF+rjKjCjMEaJWVZR37kyfjBlDZ7z1FrsmAsRWgHCDKErTbUEGRWSRB6dfTydlp6eRq5HXZ1MwabMeba+nhHLEwo3P9TTf6+EI2khhCGjufdrwqhAmO4nbnxM+/ZTyYModDlFq349yf0hgQRFZ5JHp3yOdv2tT6xdqh8xK6sTeDApkr4dnPWktvBmkFo3YH2RxeNqWe59wNa4YMoRWDxxIh3zzTbgsuJ+qBMRi7phjou49FFHUyNQs0LOrgxo9asqml1QZ9gY2MNjlzSA062m+15NielgvrOTKzwvr3idcI1Nnz6Y3x4+n3J07w2XB/VQkIOb9I0dG3XMooqiRqVugWyc7bS0L7YOoK2c0kuVps55SKsyWWY+XvVdzaS1swq5zPVA+0dBsO29Nfm7bH7Rzd8Epp1AVe1iGImoHUip+5OFfw8OHR91zKKKokalb4IBe6aZXROn2xt2znu2Uk17JSof3etjCLeTNAIpH/+fPxUtzsaTp7Pbn8euuoyyEiIgFnzXLiMUc+yWMNsGzQrTEFM5/0H4Z1CzSs8KS7i2a7PX07biSRvT8jIb2/II9G6yk3PQK9mQQZGsu7x4ltHcxvNOJQN0+3PuEa+aFyy4jPyznwuFJzfuDBsXUb8yIYsKmZqF+3Z2UwZZzXp/aJmJOu3tXvB4+1yN7PWxbjXM9SXykGjP5V2yMad6UKXTHvfeSs7ExxhpQzDIE5AzAUUfF1B0oopiwqVlovx5O8vnUtBXLy2ALN/ZmUKhZuHnYwo0f2t17PXzAB+d6kvRIBfnLwxPHNHr21Kk0Y/r0JEmPZpUikJNDdPjhMYkERRQTNjULdWTnp0Ud7bSxJPkGC+k869ll4bZ7r4fse5/rUVNfqjmwBkolZ4icPh95xew2huTnOPV/veoquvz55ymN60FKcQIxGCoIsdievhRnrXL3Oxc4kqaIcjOrqBNbtxVml7I3AzdbufEuT7NZD3SPek+OnCGyB4JxxZAVtz8TXn6ZsqGI1BvgRErkdhNxaPlYEhRRLNQULjNqaBb9uNZN7gSEhZC9nnz2ZtCVg8XlpJczFZ71pPGx2uCuPSrsYyv8oOwWLRr3PuF6s4Vd/v+Xo7ie8tFHvMSKnxvhOFn+/gknxNxFKKKY0alZcNiBmRw2nFgRGSNfXkYVFeaUajMfmfWk8R5DsCk6KZtZ43vIGPAG1SoOTwO2+I1np7Ep95GLF1MeDrgaNFKKV8tLtHTIITELCUUUMzo1C4rlnJ5Gc067hz1Xl1HnDmzhpplU773XA72j5nMQqVQyI/LZ41dE3x16KG3q04cGL18eadPIZyUCuXwo+rTTYu4RFFHM6NQtOLhfBi1ZGbs5rcx6OvKsR7wZaLOeFhZuUD7qjn20ktWyex9/pK6391G5uP159ZJLKAezon2QsuDHLldMPuZCJKCIQiQs9HfUkF37RJGGD3fIrEc8V/O5nlxnBXuu5lmPjaO97t7rgTcDCz0cLboiikiv9N4ZZ5CLfY1BEelF1ET1xGi2HeohFFGIhIX+Dh+QSU5esvW0s0+Um1GtzXo6ZpeQs8Vejw3neiz0NLTflVjd+4Sr9R4+U/TgbbdRpvxCRkoNAunpROeeG1dfoYjiwqdm4bb2iZxpHs3CrUseW7hlVPBsJ00LnRDcbV2A5TY1x9Joqeqyo4ukuS95Hr/mGnroxhv3lQ2fW4mARGNlJ7jxpPh3KeNpHWUNIzCY/c7l8Kynd+GvNLzHFzSs5yLq1+UXysso5YOlfl56Yx9uMHEzjL9ZKm7I4F+zOqeHb7mFfOL8Eik1CPh5GX/YsLj6CkUUFz51C59zTCMNKvqeuuWvp3RHHSsecaODk+/qjlhyJPOkO3VveNa0aby9uOssme6Vo0L1CPAZsngTFFG8BBUtP3RAZ0p3cvCEkMGBonJCrOQREK8K4t5H71THPsfemDCBgnK2BMnaBCQQXpz7QwIIisiij0kef8kUFnSwaO/QLT0IyBkice9jRLprxgyqz8oyomrUqRKBggKik0+OWyIoorgRqlvBYUMPZOs5/CpVd4SSK5nm3scgEdb2709L+ZArksUJyI+Nvn3j7iQUUdwI1a1g6MD+ZNNia6srIyRLHgFZmgumGfcVMHXWLKqVX8xI1iQgBilXXqlL34x7CnURD5XEQyA/L4fy89j1BhIItEFAZkReHdz7tFG1duvLo4+mkqKicB/jvtkJSOiQiy/WpRdQRLpgVLeSQ4YMYCeoGGZ1Ryh5krk65Orm3idcL+7gWVF9B+xVhuNj6vvsW5B69dKlC/iG0gWjupUMO6gfh2bAPpG6I5Q8yfR07xOuF6+PH0+NMQbdC1cn7itAQPaGJk3STRAoIt1QqllRIfsSy8uF9ZKao5NcqVy5bHqbgHQvB87ziJkvkrUIXHSRbv2BItINpboVHXLwgWTH8py6A5QkyVwciygRSVz+2CV6J5J1CBx0EFGXLrr1B4pIN5TqVjRs0P7kwPKIugOUJMmMcO8TriuPX3cd+cU5JpL5CfCBZWKfgnomKCI9aSpaVyc+2Jqfyw8PEgg0I2CEe59m1e/1ciYvz/kMNBXfqzG8MZaAx0N04YW6tgFFpCtOdSs7ftQIyjDAr5i6PYZk7REQ020j3PuEa7OyY0f6aOxYjnVlC5cF981CYMwYIonIqmOCItIRpspVjeTlOT8cUao8RAmVrZ73h4xy7xOuI3fcfTfV5ekXiC9cO7hvIIH8fN0OsTaXEoqoOQ2Lvz5y+CCOQYQht/gwR9Q98aqQ6LnJT4MH0y+DBkUkHzIpSkD2+U4/XXfh8K2kO1J1Kzz6sCFsPYczReqOUOIkk6U5I937hOvJ1NmzyQW3P+HwqH1fzg5x9F0jEhSREVQVrbOAT9J3L+qkqHQQK5EERBH5kmDS/++TTqJKKKJEDrV+bYkJ/k036Vdfs5qgiJrBSIWXJxw5nDIzET0zFca6vT6Kex9fkgwH7rrnHmrAXlF7w6PeZ7KkL37lDDoGAkWk3pAbKtGA/r3JnujNAUN7hMpjIZAI9z7h5HrpkkuSpgTDyYT7+yAgZ4emTt1Hptg/hiKKnZ1pSx592FByGvTLxrRQUkzw2iSfK3tgyhTyIHCeeZ66Aw8kEm8KBiUoIoPAqlztUYccTAGEEFd5iAyXrS470/A22mtgNv+6Tm9oaC8LPlOFgHhPnz7dUGmgiAzFq2bl6Xyw9ZAhB7JXbgy/miNkvFQNSd4nlIOtz7KbmABm5sYPdrwtyBideWa8tbRbHt9E7eKx7ocnH3Uo4hRZd3j32TO3Al42ZrDbn0b4n9vnWCU1g3hQYOMSoxMUkdGEFa2/A4cAGHzgfpgVKTo+RoolXhUcPr+RTURU97bu3emLE04gSpL1XkRCpnom8cbyhz8YTgGKyHDE6jYw9oQjER5C3eExTDI5Q+RQxN3TNP61XYsIroaNdVwVi6Xc3LlxVRFpYSiiSElZMF8ufyENHcARXJNwsNGCOE3TJVFEqljwLxk5kjbst59p2KWUoLI3dP31CekyFFFCMKvbyJgTeVaEpRF1B8gAyWRpLpimiiri4yni9kecaSKpQ0D2hh54IGHyQBElDLWaDeVkZdKwQQfAGaqaw2OIVOLw1KeQz8EPODxErSwDIalDQM54XXVVwuSBIkoYanUbGnvCEWRT6BeyuqSsIVky3fuEI3j3jBnUqHOMm3Bt4f4+CIj7pYcf3kcmfT+GItKXpylry+IzJSMP5lmRQr+STQnSJELXFqgXE+ipSZOIfD6TELS4mLJMetFFCe0kFFFCcavb2NgTfkN4GNQdHz0lq2XTfRXTQxxiwJeZXI8PKnJJqExiwfiXvyS0SWkM3z0JR65mgxJG/KhDh5DTyZYySJYm4GJjBRWTuP3BrCjJIzN0KNE55yRcCCiihCNXt8HRxx9ODrj9UXeAdJKsIYOjbCqYGniD/B8caiCIJeLkjI4syT30UFLahiJKCnZ1G73gjBMRr0jd4dFFMreiikg6dxcbLdTDK7cu4xxVJXJmaPRoosMOi6qYXpmhiPQiaZF6BnK8ou5dOxGM6CwyoC260cDm+iq492khVtPb9Xy49bvDD296jxcJIiCGIq+9lqDGWjcDRdSaScrfufisk9nbgj3lOVgRgHhVsCvi3icc32mzZlEtDriGw6P/fTHXfuIJ/euNokYooihgpUrWHI5Vc+zhwyjd6UyVLqdMP+Uwq+r/6BePGkXb2SEqUoIICGsOyZHMpPozmUw2Kd32qcccylFcMSuy2kMgMyKV3PuE4yuzojrMisLh0e++mGu/8YZ+9cVYExRRjOBSodgFZ55IWRkZqdDVlOmjKCJfmvo/MOafdx41YkZu7HMpsaCYMx18sLHtRFA7FFEEkFI1y4F9e1LP7l14KUcdB5mpOhZ69bsuL5cVkTnGczYHznPDB51eQ9+6nmCQ6PnnW99Pwh0ooiRAN1OTvzvnFOrQAQ4pzTRm7clao6B7n3DyPswhCOxud7iPcT8eAl26EL38cjw16FoWikhXnNarLIOXR0477gg+W6TmIUjrETe2R65cc/2oeOyGG8iPcOL6PhSy5HnooUTjx+tbbxy1QRHFAS9Vig4b1J/69+oOp6gWGHAXW0SaKc28807yIV6WvkMmRzM+/FDfOuOsDYooToCpUvySc09lRWSOvYVUGZNY+tnAntbNlKoLCuiDs85iSz98VekybsyTFizQpSo9K8Ho6knT4nVNuvAMylTYPYzF8evSPTc7tzVbunPmTKpDrKL4hy2bva5feinR0UfHX5fONUAR6QzUytX1LO5CRww/iNLT4aHbjOMs7n3s/oDpRP/loIPoJwVMjE0HrqXARUVEjzzS8q4S76GIlBgG8whx2vFHUD5+nZpnwJpJagb3Ps3E3eul5vZHlpWQYiMgs6Evv4ytbAJKQRElALLVmrj2d2eSQ7z1IpmKQD3HITLrP/iFJ55IFR07moq3MsKKh4oHHiBS2G2SWZ9LZcY4FQXJ5iWes045CvtFJht8s7j3CYf1znvuoXpx0IkUOQGxkBs5kmjy5MjLJCEnFFESoFuhycOGDqBBB/bFzMhEgykOT30mtj57mYPmwZQ7ygdOYjstXBhlocRnhyJKPHPLtHj+mOMpPy+HbDjnYYoxreOxMrMiEsj3T5tGXgTOi+x5k32hX3+NLG+Sc0ERJXkAzN78bZMuYEVk9l6khvw1BR1M39E5U6aQs6HB9P0wvAOFhbu8ahcXG96UHg1AEelBMcXruOWqC0hcASGpTaA2j38hWyA9zfsdATxv4UdSQjvceCPRaaeFz6PYJ1BEig2IGcXpxL+0x405jrJMdmrfjKzjkbnOIktaM8QrNxRR24+ChG057jii6dPb/lzRu1BEig6M2cQaMrAfHc6HXTNMeHLfbKxjlbfeIo5rS3i5adFJJxHWhFs8CbJGLiba777b4gP130IRqT9GppHwtOMOpz49iuAcVdERc1vIPdM0NuWulSUopD0ERBGtW7fnvYleQRGZaLDMIOrE88dQLkcBRVKLQCMvm9oDAbWEikOaZcOH07r+/eOowWJF5dDqjz+atlNQRKYdOnUFn3rtRVTQAQcPVRohzb2PCf3Mtcdw6uzZ5JIv4FRPYiH3t78RsU8+syYoIrOOnOJy33TFOF6iw+OlyjDJYVarjca/2CqsJtU9LYgSEkemZ5yhyqMWkxxWezZjgoBC+hMQo4UpPDNywied/nBjqNHs7n3CdXnmjBnUmKpOeEUJ3X030SWXhMNjmvtQRKYZKvMJ2oF/hd848TwOG4EzRskePXF46jexe59w/J658koKWmjvK1w/W92XJUk5K3Tdda0+MuMNKCIzjpqJZO5UmE/XXHwmHKQmecxcebnktaAiEqwP3nYb+TLNFQI9rsdBrAUnTjTdWaH2+gxF1B4dfKYLge5dO9Hl40bzgdd0XepDJdETqCm0rvHI7KlTyeb1Rg/FjCVkGfK884geesiM0oeVGYooLBp8oCeBvj2LacKZJ1E2vC/oiTXiuly5ORHnNVtGN3sTeIVDYAck5IGVk3jGOPVUoueft1wvoYgsN6TqdmjAfr3onNHHUHYWuyFBSigBV7a1l67uYqOFBou4MGrzwRDXPbIfNH9+mx+b/SYUkdlH0GTyDxnQj67gQ69Z8g8LKWEEGiw+E93Ypw99e+SRCeOZ0IZkOW7sWI6BcX9Cm01kY1BEiaSNtjQCPYq70AVnnECZ2DNK2BPRaCH3PuGgTZ01i2qtdsBV+vO731l2JhQaSyiiEAn8TSiBgf1788xoLDmdjoS2m4qNiY+5tBQwcf6aZ0Rbe/a0zhDLOaGbbyZ64gnr9ClMT6CIwoDBbeMJ9OrWhW6fNMH4hlK8BVduNjks5t4n3JBO41lRnRVmRR07Es2daykT7XBjJvehiNqjg88MJ5DHX5L3TZnEy3QZlIZQr4bwlsOsqfIP/a1zzqGGdJMfEygoIPrrX4muvtqQ50HFSlPl+VSRPWRqRmDmDZdRYWEHcsA/XTMq+ry0qnufcHRmcVA4d45JzdXFMOHjj4nOPDNc9yx5H4rIksNqzk7dxiHHe3YvonTsG+k6gOLw1IrufcJB+ssf/0hpHk+4j9W937fvrlAOhx+urowGSQZFZBBYVBsbgWsuOoMO2r+PtlQXWw0o1ZJAXV62Zd37tOxr6P2jN91EPrMcERA5xcjil1+I2Aw9FRMUUSqOuuJ9vpA9MJx45HAoI53GqTaffZOlWLr7jjsoEAyq32sxrPjtb4k2byZ+4NWX1yAJoYgMAotq4yNw7BHD6Pfn8T9QTjb+Dyl2ArV5Jt0vib3LVMOOQd8991wKquzoVYwS2E8evfNOHD21RlEoImuMoyV70Yf904lFXZfOBdg3imOEXSkauv3OmTOpTlWjBfGL9957RFOmxDGy1ikKRWSdsbRsT26+YjwNH3wAe+/OsGwfjexYfYpyWzVgAK0YPtxItNHXLftBvXsT1dcTHX109OUtWgKKyKIDa7VunfvbY+gcvuCJIfqRdZv9XE30XW4qMe2ee6hWlsBUSHJIdcwYoo0biaNFqiCRMjJAESkzFBBkXwSGDuyneWLIYU/SDofFXf7vC0aEn4t7H1swEGFu62VbdPzxVNa5c/I7JkuE4inhzTeTL4uCEkARKTgoECk8AfHEcNd1l9JgNvFGoL3wnEKfyGHWVHHvE+pzy7938qyoXqKaJiOJAjrgAKJVq4gmTUqGBKZoE4rIFMMEIVsSuPCsk+nMU47W7OngGqglnT3vU8m9z55e7/3q1QsvTM45KlF+N9xAtHo1UY8eewuFd3sRgCLaCwfemInAiEH70xy2quvftwdmR2EGThyeEnz40dxp08iTzSwSkSRAX1ER0eLFRPfem4gWTd8GFJHphzC1OyAnjCTQ3rm/PXbX7ChN7iCFCMiMyA//fXT/bbeRs6EhhMW4v2IYwWHLqaSEaPBg49qxWM1QRBYb0FTtzhA2ZJjLs6MDORx5VgoEgYt0nF18mNWr8qHOSDuiQ74n//AHCjidOtTURhViBSf7QXI26Mkn28iAW+0RgCJqjw4+Mx2By8eNpnFjj6c0nhnZ8QXMpst5ZAJHNwl5zmbedRe5HQYEYszLI5o4kcjlwtmgGEcSiihGcCimLoHBB/SlObddRYMP7EuZKT47cuXyr3QkjUBp1660kP26BfXaMxM/cXJg9ptvUiKKqpGPERSRkXRRd1IJXMSWdb8ffxp16ViQsgopVd37hHvw7pg5k1zxmnKLc1IxfJAluKVLiQYODNcc7kdIAIooQlDIZk4CfXoU0S1XnU9nn3o0ZfI6fqrFOkpV9z7hntYfhg2jNXKuJ5YkMynZB7r2WqK6OqIJE2KpBWXaIABF1AYU3LIegeFs6j3zpsvpOA4vYeP9o7QUsSRrTPGlybae5KmzZ5MrWrc/kl98w8nB1Iceaqta3IuDABRRHPBQ1HwETho1kmbffAWNGNifMtINsqBSBMsu9z6KCKOQGB/zPlF1pMtzsg/Urx/Ryy8Tff45DqYaNI5QRAaBRbXqErDzbGj86SfQ9ZefR/txqIk8jmBqxSRniBx+vxW7FnefZsycSQ1i7RYuiQISL9nPPEO0du0uZ6Xh8uJ+3ARswWBwBtcyM+6aUIHRBNg2lHKNbiQV61+/dQf9a+FXVFpRTW63xzLmzltYyb7JxhoNFp/5xfrMunJzKUf2eponUUCFhUTz5hGdd17zT/DaQAKYERkIF1Wbg8B+bNAw+ZKz6eqLzqAB/XtrBg2yj2T2JA5PdTNVNjuMNuR/8PbbyRsKzy0KaL/9iF54gWj9eiihNngZeQszIiPp6ls3ZkT68gxb287aOlrw+be05Oc1JA5VfSZd3lo6YhD95+RR8KwQZqTtPK4bef+nh3hFePBBojPPDJMTt40mYMAxY6NFRv0gYCyBfHaLI94ZzmKT708Xf09f/G8FOXhfyePzGduwzrWLex8fvEu0oiqRrOQ6isN1133xxa69oFa5cCORBKCIEkkbbZmKgESDPe24I7Tri2+X05Iff6WqnbXUyPtIZki1BR0ss9+lB28O0k1invAHvm7gi3eCoISEgQIJikiBQYAI6hM45rChJNeaDVtp8fcr6Je1m7UosV6vurOkWp4RpXqSnT65juVrJl/H8YWkHgEoIvXGBBIpTGB/jn0kVyAQoO+Wr6Ivv/+Jqmtqyefza/dUEt3F5tupmqTnHfmazNetfPEuEJLCBKCIFB4ciKYugTTeezl8+EHaVVFVQ/9b9jN9w4qJgkFllu7qs2QxKnWSnAZr5GscX1P4GskXkjkIQBGZY5wgpcIEOhV2oDEnHKldsnT33YqVtGLlepI9JrfHy7opmBTpxbOC1ZMoHy9fJ/J1IV+X8YVkPgJQROYbM0isMIHQ0t2EM4jWbdpGP65ez9cGbZYU5OU8Ly/hJSJ5LHyINZMBytLbyXyJ8jmVL+yGMQQTJygiEw8eRFebQL/e3UmuM08+SrO2+2XdZvqBzyZt3FJCmZnp5G40zouDHGZ1sNLzp6epDSkC6cQjYICvIXxdwNc4vvbnC8k6BKCIrDOW6InCBArz82gUHzCVS9KqtZtoBc+WtpdW0o7ySj6nZCe3l5fxAvos49XlZJNZVZDMdsQWsQdfp/Els55j+EKyLgEoIuuOLXqmMAFxJSSXpLr6Rtq8vZQ2bSultbyct720nI0ebByugsjjZuUUQz/E4SnpFYk0hvYjLSKzHTGpECODoXz152s8X7Lcls8XUmoQgCJKjXFGLxUmkJOdSQNZKckVSnJwdsv2Mlq/tYTWb9rODlmrKJeVixymlbNLgX0YQMjSnF+hmEtylke+bGSmIwdJReGM5GsUXzJHlCubL6TUJABFlJrjjl4rTkCW8uQaMrBfk6Rl7B28vGonVVTXUElZJcn7qhqXNqNip5FasD+x0JMzTeLex5tg9z4ysxFDAlE29Xx140sUznC+juRLZjwH8WXnCwkEmhOAImpOA69BQGECXToVkFxtpfpGN1VV12pGEaKoejfUk5Ot9BpZGdVyAQl2IMpBlsA8fInJsyT5AhDFIJfsKYkykc9lOVCuwO5LbP3ktSyXyecFfHXkq4iv7nz13P26D/8dyNcBfCGBQKQE4H07UlLJz+diEXKTLwYksAoBUSiioOTBCv0VhePkSxRSW5fMeJBAQG8CmBHpTRT1gYBJCKSznHLJng0SCCSTgMzGkUAABEAABEAgaQSgiJKGHg2DAAiAAAgIASgiPAcgAAIgAAJJJQBFlFT8aBwEQAAEQACKCM8ACIAACIBAUglAESUVPxoHARAAARCAIsIzAAIgAAIgkFQCUERJxY/GQQAEQAAEoIjwDIAACIAACCSVABRRUvGjcRAAARAAASgiPAMgAAIgAAJJJQBFlFT8aBwEQAAEQACKCM8ACIAACIBAUglAESUVPxoHARAAARCAIsIzAAIgAAIgkFQCUERJxY/GQQAEQAAEoIjwDIAACIAACCSVABRRUvGjcRAAARAAASgiPAMgAAIgAAJJJQBFlFT8aBwEQAAEQACKCM8ACIAACIBAUglAESUVPxoHARAAARCAIsIzAAIgAAIgkFQCUERJxY/GQQAEQAAEoIjwDIAACIAACCSVABRRUvGjcRAAARAAASgiPAMgAAIgAAJJJQBFlFT8aBwEQAAEQACKCM8ACIAACIBAUglAESUVPxoHARAAARCAIsIzAAIgAAIgkFQCUERJxY/GQQAEQAAEoIjM8wzYzCMqJAUBEACBsARcLT+BImpJRN33OeqKBslAAARAIGICuS1zQhG1JIL3IAACIAACCSUARZRQ3GgMBEAABECgJQEoopZE8B4EQAAEQCChBKCIEoobjYEACIAACLQk8P8B83rkBJBT9OMAAAAASUVORK5CYII=",
      "text/plain": [
       "<PIL.PngImagePlugin.PngImageFile image mode=RGBA size=418x400>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Claude's analysis:\n",
      "\n",
      "[Assistant] I'll help you answer whether Cyan is the minimum in this pie chart. Let me examine the image more closely.\n",
      "[Tool] crop_image({'x1': 0.0, 'y1': 0.0, 'x2': 0.3, 'y2': 0.3})\n",
      "[Tool] crop_image({'x1': 0.3, 'y1': 0.3, 'x2': 0.7, 'y2': 0.7})\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKcAAACgCAIAAADmcesDAAANKklEQVR4nO2daWwc1R3A3zEzO8fO7tpeHzF2ISBoSgoSkEpRQREpzZdEUb4QKW0VUamipIggCiWRkzgJtmmrNlxqSVBFQ1sJSMVZAlIaKAIKSCB6hbYUCPeRvWI73sN7zbx+2I2v3bVn57Df2P/fp3gz783KP//n/d9/3rzBjDFkl3c+Kt7+q3gub78HwDkdUmxHx46mmghOznfz3THDcNIB4ALniJ8324TYPtm2n4PyhUcgZo/4frOtbFr/zVMjH35RstcWcBERFzuFL5ptZcf62ycLT76UKRswnC88BiNdzVu3M67fem/cMG20A9zHMElEON1sq6Zj/Yc/i4FyfmiVhm20as764WfOfHKqaOM0gEd0CV/aaNWE9Xc/KT7x4lipbOMsgCdQzHqbT+BRU+P6zXfFS2XI4DhCJKWu5ifryHqs33ZfwoCknTMYYzambcii9WOvZ977tGiCdM4oMrFNSNhoaOkKf+CREROc80eLMGKv4dyxPvTQaezgDg3gHV2inQQezWn95GfF1/41DgM6h2CMviKetNd2Dut7HkgWilCU4ZEAKXYKn9lrO5v1R/48dvoM3FbjFpsJPJolm2MMPfjMKIJrO68UjECHeMpe24ax3ncwCcp5JiSM2m5b3/q/PyiceL9gu1NgHuiyG+iokfU7HkzlIYnjGIxZr90EHtW1/ujxsUwOlHNNgJS6RJsJPKrN5gpFdvjoKCyI4xzMzE7RZgKPamP93iPDkMPxT94MdFGXrI9lzRffypkQ6Nyj0zGM7Y/C06w/8OSIAXdZ/ECHGHfSfNJ6ociOv5E1IY3jHoxRj/SBkx4mrd//xAgo9wUBUlomfOKkh6p1xtBzr2bc+EqA9zDD9j3WClXr9z8GqbtvKDLJ9n2XClXrT7+cgaq7X1BITsCOHjcjCKHfPTuKMHbpKwGe0yHaWSs3FYIQOnI8DcvifESP+KHDHsjjL6YZXNz9Q4CWuoWPHXZCfv/cGXicxUcQZjipwFc7gTj3F0UmOkzgEUIkm4fSjJ+QcCFA8g47sb9DCbAgRKWk807Aus/oFT5y3glY9xMSLXeLYH2JQVHZeQKPwLq/KJnU3uYUMwDrfoJiUyEu3BoF634iKrqQwCOw7i/OER0tppgArPsGiRrnCI4WTk0A1n0DQeUuNxJ4BNZ9hMGI8wp8BbDuGzBjQTrmSldg3Te0ik3vF9sIsO4busVP3eoKrPsDgZhOHl2eAVj3ByIudbpRi60A1v2BYaIOl6ZtCKz7BRORCLWzFXxdwLo/aBFdU47Aul/otrUjeCPAug+gxOyhriXwCKz7AgmXuiSI9SWGaaIOZ48uzwCs+4ASEtqoO+spKoB1H9Bqd/f/RoB1H9AluXl5R2CdfwhhPYKd13fN1qe73QGuE8DFLsHNBB6Bdf4xGet0NYFHYJ1/imagXbC/KXhdwDrvRNxO4BFY559OyeVAR2CdcwhGvYKbFfhqt673CLiIRIvLHOz+3wiwzjem6eISmgnAOtcUTLmTujxtQ2Cdc3ThDMbu7xIG1rmmU4p50S1Y5xfsTQKPwDrPBGhpmeDa8y5TAev8gk3DiwQegXWeybOAK3sP1QLW+UUjGYo92dkZrPNLh+To9V2zANZ5BaNewenu/40A65wiO3591yyAdW5xYff/RoB1TikZIlhfcgRIXsIFjzoH65zSLjl9fdcsgHVO6XFjH/hGgHUeCdBytxvvfGgEWOcRgsqur4Gf3j/AHyVD8C6BR2CdTwRSUnDOw/696xqwAcYsIic2/fORZf/zqjCHwDonKGKmRUm06TFZGPt4+bItvz4oFYvenQ6sLxgYs7CS7AjG9EASE0axyZiJEIp3db189dXrjh/37tRgfb5RxGxYTXRoMVkYQ5hiVK6sgWVnl8Kmw/qewcHVb7yhnznj0XcA6/MBRmZYSUX1eDiQwJhRwhgzEELorPKpjIX1k+et+Ly392tg3Y8oYjaiJqNaTBbPYCRgVJoR1nXJaApCqG9o6OHrrtO8EQ/W3QaziJJq12K6nCTEnBit0Vnlc5JVZITQnzZtysoyWOcaWcxGlGS7HlPoKMICQtX1brOHdV3yslT5x+DevQd27Ahksy5+zwp47Y88nBcudlhESUWD8ZCcJNiYMlrbxyTkwE9+wDCu/FgIBLyYwkGsN40sZCNqsj0YU8RRhkRibbS2SFZThLJREqte7rv11h/fc49QcPlGO8S6VSJKMhqMh+QEISbFLoR1XWJd0T9+Z2NeEis/6ul0Khp1Pdwh1mdDFnIRNRENxlRxlGERszJCDLkU1nXJaiqe8mNa15++9trNR45g03TxLGC9DmElFQ3Gw3KcYIMSVAlrzErzcOqspph02i2xPfv3rz96NJhOu3gWsF4lIOZalGQ0eEoVRxkSMao69i6s65JTlRKZZv39Cy88cdll33zlFRfPstSth5VUVIuHlQTFBiYMVcIazUdY1yUdCZkYz/iwb3Dw2U2b9NFRt86yFK0HhFxETbXrMZUOMyxgZFRGazS/YV2XdChY++Era9Yk2tvBuh3CcqotWA1rihlDlbD25PFB26SDat3P9wwM/PaGG9Qxd97TusitB4TxiJZs12KqOMyQSFCZVZLwhf5ijcgpct3Pj2zZcujGG+v/RTTP4lxBFVJS50f/e3nPS5d2v3pey7uqOIwQwqjE+NVdZTwgNfqvn+7eXVTd8b54qjQBYTyiJNuDp1RxhOHJsPYRM8qxtRiUEjcm7r6/wofl023BRFiJU1yeqIRjyze4uGJGObaWB2666YZDh2jJ6RTDl7EuCfmInOjQY4o0gpCAcXm+p9XeEO+MHvnuZDm2lmgq9Vlvr5zPOzyRn2I9JJ9uCyYickwgZUwxMivpd8lvF/KGZDWl8dUdIYRS0ejx9es3PvUUdvZXzrt1SchHlGR7MKaJwwwLk6O1m2VpXshqiknmyK/37N+/9oUXdGdTOE6th+ThNi0eUeKUlMmUktliier6ZDW1NJf1ty+55L0VK654800nJ+LIeoCOh5VUu14N68nRenGrnkImrNeWY2vpGxp6cvPmoIPFVQtvXZeH27REixqnpEQwQqyMKpXwJSN7grFwnXJsLc+vWzcSDvvPukTzYSXVrp/SpGHEBILPjtZLz/RUMprVIszegYGD27crdm+/zuvMLSQPt6qJFjVOaZFizBhfNfAF59CN3xvTNYsHp3U9mMnYO5HnsS7SQouSjOoxTRxGmE6M1otigu0yeTlg/eADO3fuvvNO0dbc3atY1wPDbcFEixKnpEgIRhDWc8Ew/sWO660fTw2jJIr2Ju5uxrpEC5OjNaKTc2sIawtkNUUsl0uCVSMGpQ9df/33Dx8m5aYjygXrQXmkTY23qAmBFCiZGK1NcN0UWU2lZnNr8/b19295+GF13qyLtBBWkh3BuCalEKKEVJ/rgdHaNnOWY2v5vKfntTVr1h071uzvvTnremCkRUu0qXGBFAjGrLoQpQyynZNTFRM3vdxh18DA6tdfb/aZ57mti7QYkZPRUEyTTuMpozWIdpesppRp09bfWrXq03PPXXniRFOtGlrXAyOtWqKlEtaTSTiM1l6RDutGs5d4hBBCfUNDj27d2tTTr9OsC7RYeTAzKJ5mmBJsoMpTuKDae9Jh3V7Doxs3ZlS1aevBwGirlmhVY+KU0RojE2TPJ9bLsbUM7N171+23y5ZLdWTVuc+v6PzbstBHEs1hbDDOVgovHbJq/dWxVji4bRtuZlkVIcgguMQgC19oZlkda4V7b7utHLBa0F2cK6P9SLHxcjkrDO7axSwvnwXrXJDVVLH5Etv0HrTHt2xhlFo5GKxzQVZTqONJcf++fTlFsXIkWOeCrKbYmapP54MLLvjHqlVWjgTrXJDVVDbXOkkr9A0OpiOROQ8D61yQ1ZRS8+XYWl696qpYZ+ech4F1LsiEgvbKsbXsHhzMhUKzHwPWucB2ObaWxzZvzs+1NAOsc0GmwWYF9rizv3/2Z57BOhdkVEszLovcfcstdNaNCcE6Fzgsx9ZycPt2Q2rYJ1jnAofl2Fr29/eXG08FwfrCU1kd626fw62txzZsaLTtBVhfeHKqC+XYWnbfcUdWrz81AOsLz4y9Y93iPytXvnPxxXX/C6wvPFlNcaUcW0vf0FCmXoEWrC889lbHWuEv11wzXNe63MwTdYAXZELBskvl2Fr6BwbGa0Z3Qr06HWAVF8uxtfxh69baPyly1TcuFS0/UQd4QTpo9Zl1e/xy587i9NUW5Morvm6yxbihk39wsjrWCkN9fdL4+NRPiCSJV1xyEfEmhwSsMO5xasUwfnDbNnPKFZ0ghL595SrBmxwSsELB7XJsLfv6+/NTyvIEIRQKqisvWg7hviDkVEUoe/K6qKl82d3917Vr0dm0rmp6w9rVFMJ9IchqiuDq+5sasWtgIH12jU3VdFBTLv3q+QTEzzuurI61wt8vv/zj5csr/57UvP5bq6lntQKgETlVYWSefu19Q0OZcBgh9H+/jEjNbgeWKQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[Assistant] Based on my examination of the pie chart, I can see the relative sizes of each segment:\n",
      "\n",
      "1. **Royal Blue** - appears to be the largest segment, taking up roughly 35-40% of the pie\n",
      "2. **Peru** (brown/orange) - appears to be the second largest, roughly 25-30%\n",
      "3. **Red** - appears to be third, roughly 20%\n",
      "4. **Light Slate** (gray) - appears to be fourth, roughly 15%\n",
      "5. **Cyan** - appears to be the smallest segment, roughly 5-10%\n",
      "\n",
      "**Answer: Yes, Cyan is the minimum.** \n",
      "\n",
      "Cyan has the smallest slice in the pie chart, making it the minimum value among all five categories shown.\n",
      "\n",
      "Ground truth: Yes.\n"
     ]
    }
   ],
   "source": [
    "print(f\"Question: {question}\\n\")\n",
    "display(chart_image)\n",
    "\n",
    "print(\"\\nClaude's analysis:\\n\")\n",
    "ask_with_crop_tool(chart_image, question)\n",
    "\n",
    "print(f\"\\nGround truth: {answer}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Try Another Example"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Question: Is Forest Green greater than Medium Orchid?\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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Pzig3KRB/cYbb3QKjS4hDfaQQw6xPfbYw03XvPHGG2lcOfurSnlp3Lix7bzzzq6zusmfeeYZ03TMqaeear169cp+IdLooX64zjrrLDviiCOKvMro0aOL3B+WnZp26datmx155JGFRNKT6rXXXmt33nln6JWb8847z1q0aOHk1xTt888/bxMnTrRDDz3UbrnlFqtSpUohNmF7E3X5GzZsaFdccUVsWB988MHYe1n2w16kxOg3UEquV/S9eNhhh9m6detMrgn6TfSroNykSP7ss89OsWY4qtWpU8cJ8uWXX9rTTz/t/C569uxpw4YNM+9YOCQtWgpNR2papriyfv364g6FYv+KFSusZcuWRcoiK45M1GEvUmxkuZNS8/777ztF9+GHH/bdHJ8p7lGXP5GzftC9oilaWfLDXPQZj1ds4mWVu4IeeP0sf9iS/exBCNqeOXOmzZgxw03HaM4xKkUfYD2l77rrrs5qc/7550dCsdH4yvysJ5einEY/++wz01NdmEujRo2cr01xMspkH4Vy99132w8//GDjxo1znwW//QwyzTzK8mvhyMKFCx1yTUPpPpD/yeeff26vvPKK6TMS5hI/7fruu+8WElXTs34rdyg3hYYktTd77bWX+2KTmVYOlRMmTEjtQgGrJeuFPsyy1GhKqqTVUwETrdTuaspBflWyVGmKRqun5GchJ0PNNZ900kmlXiPIJ7Rt29YmT57sfGvi5ZBFR1NyUbDeSW75Fmhq7rnnnnNTsvEsorAdZfm7d+9uV199tV144YV27rnnWr9+/ZxiI2daWS522223UN8CW7dudVNPUvBmzZoVk1Xv5Yez5557xvb5sUFuqTSoa3BlsZG1Zvfdd7d27do55cZzLk50NkyjqayrKs1cipznQLdq1Sp79dVXTc7Up59+urPmZF2ny7hDenLTE/vrr78eCwugJ/eBAwfafvvtV8atZd/lNPUm3zL5HnlFTvZaDqovfn0mwlzkU+CtCNQKyTfffNPmz59vxx13nPsuCLPski3q8ouBHmh0v2uK1vO/0v4oFE07SZFTqVu3rj3++OP266+/2gMPPOAebvr37+8rBpSbFPFrEPUjpid4DeySJUusTZs2NnTo0BSvGKxqWgavL/PED7TMs++8844df/zxdtFFFwVLqCR7KzO0fI6k1MpEq2W/mqKLUpH8elKTY3mHDh18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uYnSaCMrBCAAAQhAIAIEUG4iMMiICAEIQAACEIgSAZSbKI02skIAAhCAAAQiQADlJgKDjIgQgAAEIACBKBFAuYnSaCMrBCAAAQhAIAIEUG4iMMiICAEIQAACEIgSAZSbKI02skIAAhCAAAQiQADlJgKDjIgQgAAEIACBKBFAuYnSaCMrBCAAAQhAIAIEUG4iMMiICAEIQAACEIgSAZSbKI02skIAAhCAAAQiQADlJgKDjIgQCCKBX375xc466yxbtWpVyt0fM2aMnXbaafbPf/5zh66R7PmJF023fuL1eA8BCKRGAOUmNW7UggAEyplA7dq17bLLLrP69eun3NKll15qFStWtFatWu3QNZI9P/Gi6dZPvB7vIQCB1Aig3KTGjVoQgEA5E6hRo4YdccQRabWyePFi+/XXX22vvfbaoeske37iRdOtn3g93kMAAqkRqJxaNWpBAAJRJ/DJJ5/Y/fffb+vWrbN+/fpZ69atbfjw4bbLLrvYxRdfbA0aNLBHHnnEtm3bZhUqVLCNGzfawIEDLScnx0qrO3/+fBs/fry1adPGrrvuOsvLy7PHH3/cli9f7rDr9bzzzrMDDzywxGGYM2eO7b777la9enV33syZM+21116zqlWr2qZNm1xfrrrqKtc/naDzmzdvbq+88op9+eWXtmjRIjetpaktFfVDx77++murXLmyU5wGDx7sZNbxxPa0jwIBCGSeAMpN5pnTIgRCQeCQQw6xQYMGOeXjgAMOsLVr11rHjh3tyiuvdPLNmzfPevbsafvuu697/+STT9obb7xh5557rpVWV3WmTp1q++yzj6v70ksv2fr1623YsGGxa8kiU1qRshE/JSVFbMCAAbbTTju5qur/7Nmzbf/993fvdb7O6dq1q/P3+eyzz+z666+3I4880k2P3XfffU6huemmm9x01+jRo+3RRx91DHSBxPbcRfkPAhDIOAGUm4wjp0EIhIeALCdSHu69915r2LChDRkyJCacrCUvvviivfDCC27fggUL7Oijj44dL6lufn6+zZ07184//3x3/sKFC+377793FhNZiGS12ZEiZeOEE06InVqzZk2TgiILjIoUsK1bt8aO63wpZLm5uW5fy5YtTX356aefbMmSJfb222/bs88+6xQbndC4cWN79913C9WPby92gA0IQCCjBFBuMoqbxiAQPgInnniijRw50mSZkfOuihSBq6++2oYOHWqdOnVy++Rsqymi+FJUXR3XdJCmsfbYYw93+kUXXWRPPPGEXXvttVavXj3T+6OOOir+UtttS2nR9JZnuZk8ebI98MADNmrUKKe8yBJ0xhlnxPrknS/LjleWLVvmNnfeeWd7/fXXTU7OY8eO9Q7bmjVrbM8993Tvvfpee7GT2IAABDJOAOUm48hpEALhIaDl2p9++qlTQiZMmGBXXHGFE+6tt96y3XbbLabYaApJlpf4H/7i6uoCstrIalKlShXbvHmz1alTx6655hp3/XHjxjlfn9KUm//9739WqVIl50Oja7788st2zDHHxKwyX331lfMLkuKiovO3bNkSO659H3/8sVN+mjRpYlJ0OnToEJuC0nEpYGpDJbE9t5P/IAABXwiwWsoX7DQKgeATkOVDioYcchWP5s0333SWDEn222+/uekcT8rnnnvO6tatG1McSqqrOt9++21MEdJ1NR2komklKU2amiqtaIpp7733jlmT4vskJUYOy/HKls5X0RSUiqbC5Hzcv39/917K1tKlS2NyKf6OnIl1XZXE9txO/oMABHwhgOXGF+w0CoFgE9CPvqZpGjVq5KZqZs2a5SwsN9xwg/O7kd/K7bff7lZHSRlZuXKlWzX1/PPPOwWlpLry05Ejr1ZVTZs2zWRZkSKiFUoq1apVK2Q9KYqknHwnTZrkfGv+9a9/2UknneT8dB566CE35aVry3FYTtAfffSRU6Z0/vHHH++mvzZs2ODq3njjjSZnaZU///nPTg45GKtP8sWRg7OmyYpqz1XiPwhAwBcCFQo+oDcXtDzcl9ZpFAIQgAAEIAABCJQxAaalyhgol4MABCAAAQhAwF8CTEv5y5/WIQCBFAh4y7KLqtqjRw83XVbUMfZBAALRIMC0VDTGGSkhAAEIQAACkSHAtFRkhhpBIQABCEAAAtEggHITjXFGSghAAAIQgEBkCPx/KYVlOOTXjQoAAAAASUVORK5CYII=",
      "text/plain": [
       "<PIL.PngImagePlugin.PngImageFile image mode=RGBA size=567x400>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Claude's analysis:\n",
      "\n",
      "[Assistant] I'll help you answer whether Forest Green is greater than Medium Orchid. Let me first examine the image to identify these colors and their values.\n",
      "[Tool] crop_image({'x1': 0, 'y1': 0, 'x2': 0.3, 'y2': 1})\n",
      "[Tool] crop_image({'x1': 0, 'y1': 0.85, 'x2': 1, 'y2': 1})\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[Assistant] Based on the chart, I can see:\n",
      "\n",
      "- **Forest Green** (the first bar on the left, dark green color) has a value of approximately 35\n",
      "- **Medium Orchid** (the second bar, purple/orchid color) has a value of approximately 34\n",
      "\n",
      "**Answer: Yes, Forest Green is greater than Medium Orchid.**\n",
      "\n",
      "Forest Green has a slightly higher value (around 35) compared to Medium Orchid (around 34), though the difference is quite small.\n",
      "\n",
      "Ground truth: Yes.\n"
     ]
    }
   ],
   "source": [
    "# Try a different chart and question\n",
    "example2 = dataset[6]\n",
    "chart2 = get_pil_image(example2[\"image\"])\n",
    "q2 = example2[\"qa\"][2][\"question\"]\n",
    "a2 = example2[\"qa\"][2][\"answer\"]\n",
    "\n",
    "print(f\"Question: {q2}\\n\")\n",
    "display(chart2)\n",
    "\n",
    "print(\"\\nClaude's analysis:\\n\")\n",
    "ask_with_crop_tool(chart2, q2)\n",
    "\n",
    "print(f\"\\nGround truth: {a2}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Summary\n",
    "\n",
    "The crop tool pattern is simple but powerful:\n",
    "\n",
    "1. **Define a tool** that takes normalized bounding box coordinates\n",
    "2. **Return the cropped image** as base64 in the tool result\n",
    "3. **Let Claude decide** when and where to crop\n",
    "\n",
    "This works because Claude can see the full image first, identify regions that need closer inspection, and iteratively zoom in."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Alternative: Using the Claude Agent SDK\n",
    "\n",
    "The [Claude Agent SDK](https://github.com/anthropics/claude-agent-sdk-python) provides a cleaner way to define tools using Python decorators and handles the agentic loop automatically."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Note: you may need to restart the kernel to use updated packages.\n"
     ]
    }
   ],
   "source": [
    "%pip install -q claude-agent-sdk"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pathlib import Path\n",
    "\n",
    "from claude_agent_sdk import ClaudeAgentOptions, ClaudeSDKClient, create_sdk_mcp_server, tool\n",
    "\n",
    "# Working directory for the tool to resolve relative paths\n",
    "tool_working_dir: str | None = None\n",
    "\n",
    "\n",
    "@tool(\n",
    "    \"crop_image\",\n",
    "    \"Crop an image by specifying a bounding box. Loads the image from a relative filepath.\",\n",
    "    {\n",
    "        \"type\": \"object\",\n",
    "        \"properties\": {\n",
    "            \"image_path\": {\n",
    "                \"type\": \"string\",\n",
    "                \"description\": \"Relative path to the image file (e.g., 'chart.png')\",\n",
    "            },\n",
    "            \"x1\": {\n",
    "                \"type\": \"number\",\n",
    "                \"minimum\": 0,\n",
    "                \"maximum\": 1,\n",
    "                \"description\": \"Left edge of bounding box as normalized 0-1 value, where 0.5 is the horizontal center of the image\",\n",
    "            },\n",
    "            \"y1\": {\n",
    "                \"type\": \"number\",\n",
    "                \"minimum\": 0,\n",
    "                \"maximum\": 1,\n",
    "                \"description\": \"Top edge of bounding box as normalized 0-1 value, where 0.5 is the vertical center of the image\",\n",
    "            },\n",
    "            \"x2\": {\n",
    "                \"type\": \"number\",\n",
    "                \"minimum\": 0,\n",
    "                \"maximum\": 1,\n",
    "                \"description\": \"Right edge of bounding box as normalized 0-1 value, where 0.5 is the horizontal center of the image\",\n",
    "            },\n",
    "            \"y2\": {\n",
    "                \"type\": \"number\",\n",
    "                \"minimum\": 0,\n",
    "                \"maximum\": 1,\n",
    "                \"description\": \"Bottom edge of bounding box as normalized 0-1 value, where 0.5 is the vertical center of the image\",\n",
    "            },\n",
    "        },\n",
    "        \"required\": [\"image_path\", \"x1\", \"y1\", \"x2\", \"y2\"],\n",
    "    },\n",
    ")\n",
    "async def crop_image_tool(args: dict):\n",
    "    \"\"\"Crop tool that loads images from a filepath.\"\"\"\n",
    "    global tool_working_dir\n",
    "\n",
    "    image_path = args[\"image_path\"]\n",
    "    x1, y1, x2, y2 = args[\"x1\"], args[\"y1\"], args[\"x2\"], args[\"y2\"]\n",
    "\n",
    "    if not all(0 <= c <= 1 for c in [x1, y1, x2, y2]):\n",
    "        return {\"content\": [{\"type\": \"text\", \"text\": \"Error: Coordinates must be between 0 and 1\"}]}\n",
    "    if x1 >= x2 or y1 >= y2:\n",
    "        return {\n",
    "            \"content\": [\n",
    "                {\"type\": \"text\", \"text\": \"Error: Invalid bounding box (need x1 < x2 and y1 < y2)\"}\n",
    "            ]\n",
    "        }\n",
    "\n",
    "    # Resolve relative paths against working directory\n",
    "    path = Path(image_path)\n",
    "    if not path.is_absolute() and tool_working_dir:\n",
    "        path = Path(tool_working_dir) / image_path\n",
    "\n",
    "    # Load image from path\n",
    "    try:\n",
    "        image = PILImage.open(path)\n",
    "    except FileNotFoundError:\n",
    "        return {\"content\": [{\"type\": \"text\", \"text\": f\"Error: Image not found at {path}\"}]}\n",
    "    except Exception as e:\n",
    "        return {\"content\": [{\"type\": \"text\", \"text\": f\"Error loading image: {e}\"}]}\n",
    "\n",
    "    w, h = image.size\n",
    "    cropped = image.crop((int(x1 * w), int(y1 * h), int(x2 * w), int(y2 * h)))\n",
    "\n",
    "    # Return using MCP image format (data + mimeType, not Anthropic API source format)\n",
    "    return {\n",
    "        \"content\": [\n",
    "            {\n",
    "                \"type\": \"text\",\n",
    "                \"text\": f\"Cropped {image_path} to ({x1:.2f},{y1:.2f})-({x2:.2f},{y2:.2f}): {cropped.width}x{cropped.height}px\",\n",
    "            },\n",
    "            {\"type\": \"image\", \"data\": pil_to_base64(cropped), \"mimeType\": \"image/png\"},\n",
    "        ]\n",
    "    }\n",
    "\n",
    "\n",
    "# Create an MCP server with our tool\n",
    "crop_server = create_sdk_mcp_server(\n",
    "    name=\"crop-tools\",\n",
    "    version=\"1.0.0\",\n",
    "    tools=[crop_image_tool],\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Question: Is Cyan the minimum?\n",
      "\n",
      "[Assistant] I'll first read the image to understand its content, then examine specific regions if needed.\n",
      "[Tool] Read({'file_path': 'chart.png'})\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaIAAAGQCAYAAADsuWTJAABE+UlEQVR4nO3deZgU1dk28Lt6ne6efRhmZRFUkE0gqEQUd0VwjaCoL5iAghAVXJCAsghEVJAPX9+4S8SEQIJIUDQqatyixoXVBRBkGWD2vXt6q676/hgY2Qam11Nddf+ui0uc6ap6Boa+55w69RxJVdULAFwIIiIiASxoDqHZYssgIiKjMokugIiIjI1BREREQjGIiIhIKAYREREJxSAiIiKhGERERCQUg4iIiIRiEBERkVAMIiIiEsoS7gE/vnw7vOU7Ir6gI+9UnDH2pYiPJyIifQl7RBRNCMXieGqbjRs34vrrr8dzzz13wtd9//33GDNmDC677DLccMMNCaqOiOgXnJpLcitXrsRll12GiRMnHvHxbdu2we12Y9OmTSd8bc+ePfHb3/42UeUSER0j7Kk5Sg7XXXcd0tPT0adPH9GlEBGdkOaCaMmSJVizZg369u2LzMxMlJaWonv37hgzZozo0jTnk08+wT//+U8AQElJCe6++27069cP55xzDhYsWID9+/cjPT0dq1atavW1rf25VlVV4aWXXsLOnTths9ngdDoxYcIEdOnSJUFfHREZheaCaMyYMfj4448xYsQI9OrVC7IsY/To0TjttNNw/vnniy5PUwYPHozy8nK88MIL6NChA55++umWz40ZMwZz585t02uPFgwGMXXqVOzduxePPfYYevfujRtvvBH33Xcfli5dioyMjLh+XURkLJq/R2SxWFBUVISSkhKUlJRgwYIFePnll/HHP/4RW7ZsAQAsXLgQQ4cOxWuvvYY//OEPGDJkCN544w0MHz4c27dvR1NTEx555BHcf//9gr+a5LBhwwbs3bsXAHDKKafAZrOhsLAQHo8H77zzjuDqiEhvNB9EtbW12LlzJ3r16oW5c+fipptuwtixY3HnnXdi7ty5CAaDeOCBB5CRkQGXy4XHHnsMd999N4YNG4b27dsDAJxOJ1eEhaGsrKzl91OnTsX48eNRV1eHrKwsVFdXC6yMiPRIc1Nzh6xcuRLr1q2D2+3GpEmTUFBQgN27d2P16tUtr8nLy0NVVRUKCgoAAP379wcADBs2TEjNIkiSFPPX5uXltfz+0UcfRW5uLgCgoaEhrOsREbWFZoPo0D2iQyorK6GqKiZMmACbzQYA8Pv9Lb8HAKvVesQ5JEmCoigAAFmWE1B14qWmpgIAAoEAAGDGjBmYNGlSVK/t27cvCgsLceDAAXzzzTe48sorIcsypk+fjjvuuANnnnlmPL4UIjIozU/NHdKuXTt07twZ69evB9AcLNOmTYOqqq0ek52djZqaGgDAzp07E1Jnog0aNAi9e/dGeXk57r//fmRnZ6O8vBxLliwBAHg8HsyePTus19rtdjz++OMYPHgw/vKXv+DBBx/ErFmzcM011zCEiCjmJFVVZwGY3dYD1j96YdQX7T/9o1Y/t3TpUqxevRr9+vXDVVddhV/96lctnyspKcGLL76I/Px8eL1eDBkyBD179sRrr72GpUuX4oILLsCtt97aMlW3ceNGvPLKKzjjjDNgtVrx3nvvYfTo0Rg6dGjUXwMREcWG5oKIiIiMJWmm5oiISJ8YREREJBSDiIiIhAo7iBx5p0Z1wWiPJyIifQn7OSJuakdERLHEqTkiIhKKQUREREIxiJKHR3QBREQx4D76Awyi5NF6LyMiouSRevQHGERERCRU2Kvm7ni0FDv3BSO+YNdiK16cXhDx8UREpC9hj4iiCaFYHE9ERPrCqTkiIhKKQUREREJpbofWJUuWYM2aNejbty+ys7NRX18PWZYxdepUuFyumF7rrbfewrJly/DAAw+0bDN+yA8//IA///nP2LdvHwYOHIhAIIBdu3Zh+PDhuPjii094LBERtZ3mRkRjxoxBZmYmRowYgUmTJmHmzJkAgNWrV8f8WsOGDUOnTp2O+7kePXpgyJAh6NChAyZNmoQpU6Zg9OjReOqpp6Cq6gmPJSKittPciOhoqqqioaEBjY2NLR9btmwZysvLkZKSAlVVMX78eLz++ut46aWXcPPNN+N3v/sd3n77bfzjH//ApEmT4PF48PHHHyMvLw8VFRW49dZbIwqRuro6ZGVlQZKkIz5eVVWFxYsXAwDmzZuHjz76CC+88AKmTp3asrX28uXLUVtbC0mSIMsyJkyYAItF83/8RERxp7kR0SErV67EwoULccsttyAQCOC6664DAHzyySfYsGED7rvvPkycOBGyLOO1117DjTfeiP79+6Nr164AgI4dO+L6669Hv3794HA4MHnyZNx+++248cYb8fzzz7e5jn379uGZZ57B448/jhUrVmDKlCnHvKZdu3a46qqrWv7/wgsvRHFxccv/f/rpp9i5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",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[Assistant] Looking at this pie chart, I can clearly see the different segments and their relative sizes. Let me crop the area showing the Cyan segment to examine it more closely.\n",
      "[Tool] mcp__crop__crop_image({'image_path': 'chart.png', 'x1': 0.4, 'y1': 0.6, 'x2': 0.7, 'y2': 0.9})\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[Assistant] Now I can clearly analyze the chart. Looking at the pie chart:\n",
      "\n",
      "**Yes, Cyan is the minimum.**\n",
      "\n",
      "The pie chart shows 5 categories with the following relative sizes (from largest to smallest):\n",
      "1. **Royal Blue** - the largest segment (takes up roughly half the pie)\n",
      "2. **Peru** (tan/brown) - second largest\n",
      "3. **Red** - medium-sized segment\n",
      "4. **Light Slate** (gray) - smaller segment\n",
      "5. **Cyan** - the smallest segment\n",
      "\n",
      "The Cyan segment is clearly the thinnest slice of the pie, making it the minimum value among all the categories shown.\n"
     ]
    }
   ],
   "source": [
    "import tempfile\n",
    "\n",
    "\n",
    "async def ask_with_agent_sdk(image: PILImage.Image, question: str):\n",
    "    \"\"\"Ask a question using the Claude Agent SDK with file-based image access.\"\"\"\n",
    "    global tool_working_dir\n",
    "\n",
    "    with tempfile.TemporaryDirectory() as tmpdir:\n",
    "        image_path = f\"{tmpdir}/chart.png\"\n",
    "        image.save(image_path)\n",
    "        tool_working_dir = tmpdir\n",
    "\n",
    "        options = ClaudeAgentOptions(\n",
    "            mcp_servers={\"crop\": crop_server},\n",
    "            allowed_tools=[\"Read\", \"mcp__crop__crop_image\"],\n",
    "            cwd=tmpdir,\n",
    "        )\n",
    "\n",
    "        prompt = f\"\"\"Answer the following question about chart.png. Use your crop tool to examine specific regions of the image.\n",
    "\n",
    "The question is: {question}\"\"\"\n",
    "\n",
    "        async with ClaudeSDKClient(options=options) as client:\n",
    "            await client.query(prompt)\n",
    "\n",
    "            async for message in client.receive_response():\n",
    "                msg_type = type(message).__name__\n",
    "                if msg_type in (\"SystemMessage\", \"ResultMessage\"):\n",
    "                    continue\n",
    "\n",
    "                if hasattr(message, \"content\") and isinstance(message.content, list):\n",
    "                    for block in message.content:\n",
    "                        if hasattr(block, \"text\"):\n",
    "                            print(f\"[Assistant] {block.text}\")\n",
    "                        elif hasattr(block, \"name\"):\n",
    "                            print(f\"[Tool] {block.name}({block.input})\")\n",
    "                        elif hasattr(block, \"content\") and isinstance(block.content, list):\n",
    "                            for item in block.content:\n",
    "                                if isinstance(item, dict) and item.get(\"type\") == \"image\":\n",
    "                                    img_data = item.get(\"data\") or item.get(\"source\", {}).get(\n",
    "                                        \"data\"\n",
    "                                    )\n",
    "                                    if img_data:\n",
    "                                        display(Image(data=base64.b64decode(img_data)))\n",
    "\n",
    "\n",
    "# Run the same question with the Agent SDK\n",
    "print(f\"Question: {question}\\n\")\n",
    "await ask_with_agent_sdk(chart_image, question)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
